public IConnection Create(string connectionId, IChannelStream stream) { var jsonSerialiser = new TinyJsonSerializer(); var taskLauncher = new TaskLauncherNet35(); var channelMessageStream = new ChannelMessageStream(stream); var channelMessageSerializer = new ChannelMessageSerializer(); var channelMessageWriter = new ChannelMessageWriter(channelMessageStream, channelMessageSerializer); var rpcMessageEncoder = new RpcMessageEncoder(jsonSerialiser); var rpcMessageWriter = new RpcMessageWriter(channelMessageWriter, rpcMessageEncoder); var rpcMessageBroker = new RpcMessageBroker(rpcMessageWriter); var delegateProvider = new DuplexDelegateProvider(m_DelegateCollection, rpcMessageBroker); var rpcRequestHandler = new RpcRequestHandler(delegateProvider, jsonSerialiser); var rpcResponseMessageHandler = new RpcResponseChannelMessageHandler(rpcMessageBroker, rpcMessageEncoder); var rpcRequestMessageHandler = new RpcRequestChannelMessageHandler(rpcRequestHandler, rpcMessageEncoder, rpcMessageWriter); var pipeline = new ChannelMessagePipeline(new IChannelMessageHandler[] { rpcResponseMessageHandler, rpcRequestMessageHandler }); var channelMessageReader = new ChannelMessageReader(channelMessageStream, channelMessageSerializer, pipeline, taskLauncher); var connection = new Connection( connectionId, rpcMessageBroker, disconnectReporters: new IDisconnectReporter[] { stream }, disposeChain: new IDisposable[] { channelMessageReader, rpcMessageBroker }); rpcRequestHandler.OwningConnection = connection; channelMessageReader.Start(); return(connection); }
/// <summary>Serialize metadata about all graphs</summary> byte[] SerializeMeta() { if (graphs == null) { throw new System.Exception("No call to SerializeGraphs has been done"); } meta.version = AstarPath.Version; meta.graphs = graphs.Length; meta.guids = new List <string>(); meta.typeNames = new List <string>(); // For each graph, save the guid // of the graph and the type of it for (int i = 0; i < graphs.Length; i++) { if (graphs[i] != null) { meta.guids.Add(graphs[i].guid.ToString()); meta.typeNames.Add(graphs[i].GetType().FullName); } else { meta.guids.Add(null); meta.typeNames.Add(null); } } // Grab a cached string builder to avoid allocations var output = GetStringBuilder(); TinyJsonSerializer.Serialize(meta, output); return(encoding.GetBytes(output.ToString())); }
/// <summary>Serializes the graph settings to JSON and returns the data</summary> public byte[] Serialize(NavGraph graph) { // Grab a cached string builder to avoid allocations var output = GetStringBuilder(); TinyJsonSerializer.Serialize(graph, output); return(encoding.GetBytes(output.ToString())); }