unity/EditorPlugin/NonUnity/RiderProtocolController.cs (50 lines of code) (raw):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using JetBrains.Collections.Viewable;
using JetBrains.Lifetimes;
using JetBrains.Diagnostics;
using JetBrains.Rd.Impl;
namespace JetBrains.Rider.Unity.Editor.NonUnity
{
// ReSharper disable once UnusedMember.Global
public class RiderProtocolController
{
public readonly SocketWire.Server Wire;
private static readonly ILog ourLogger = Log.GetLog<RiderProtocolController>();
public RiderProtocolController(IScheduler mainThreadScheduler, Lifetime lifetime)
{
try
{
ourLogger.Verbose("Start ControllerTask...");
Wire = new SocketWire.Server(lifetime, mainThreadScheduler, (IPEndPoint) null, "UnityServer");
Wire.BackwardsCompatibleWireFormat = true;
ourLogger.Verbose($"Created SocketWire with port = {Wire.Port}");
}
catch (Exception ex)
{
ourLogger.Error("RiderProtocolController.ctor. " + ex);
}
}
}
// [Serializable]
struct ProtocolInstance
{
public string SolutionName;
public int Port;
public ProtocolInstance(string solutionName, int port)
{
SolutionName = solutionName;
Port = port;
}
public static string ToJson(List<ProtocolInstance> connections)
{
//return JsonConvert.SerializeObject(connections); //turns out to be slow https://github.com/JetBrains/resharper-unity/issues/728
var sb = new StringBuilder("[");
sb.Append(connections
.Select(connection=> "{" + $"\"Port\":{connection.Port},\"SolutionName\":\"{connection.SolutionName}\",\"ProtocolGuid\":\"{ProtocolCompatibility.ProtocolGuid}\"" + "}")
.Aggregate((a, b) => a + "," + b));
sb.Append("]");
return sb.ToString();
}
}
}