Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        /// <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()));
        }
Exemplo n.º 3
0
        /// <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()));
        }