Exemplo n.º 1
0
    private void Run()
    {
        int    idx        = -1;
        string dataPacket = "";

        while (true)
        {
            try
            {
                int bytesRecv = mSocketTarget.Receive(mBuff, mBuff.Length, SocketFlags.None);
                var data      = Encoding.ASCII.GetString(mBuff, 0, bytesRecv);

                int offset = 0;
                while (offset < data.Length && (idx = data.IndexOf('\n', offset)) != -1)
                {
                    dataPacket += data.Substring(offset, idx + 1 - offset);
                    offset      = idx + 1;
                    OnModelReceived?.Invoke(Model.FromJson(dataPacket));
                    //Debug.Log($"Server received JSON: {json}");
                    dataPacket = "";
                }

                if (offset < data.Length)
                {
                    dataPacket = data.Substring(offset);
                }
            }
            catch (ThreadAbortException)
            {
                Debug.Log("Server disconnecting");
                mSocketTarget.Shutdown(SocketShutdown.Both);
                mSocketTarget.Close(3);
                mSocketTarget = null;
                Debug.Log("Server disconnected");
            }
            catch (Exception ex)
            {
                Debug.LogError($"Server error: {ex.Message}");
            }
        }
    }
Exemplo n.º 2
0
        private RendererClient(string pipeHandle)
        {
            var pipeClient = new AnonymousPipeClientStream(PipeDirection.In, pipeHandle);

            _streamReader = new StreamReader(pipeClient);

            // Read from stream.
            Task.Run(async() =>
            {
                while (true)
                {
                    var data = await _streamReader.ReadLineAsync();

                    // Wait for synchronization message.
                    while (data != "[SYNC]" && !_sychronized)
                    {
                        ;
                    }

                    if (!_sychronized)
                    {
                        _sychronized = true;
                        continue;
                    }

                    if (data != null)
                    {
                        if (data.Contains("[ModelData]"))
                        {
                            data = data.Replace("[ModelData]", "");
                            OnModelReceived.Invoke(ModelData.Deserialize(data));
                        }
                        else if (data.Contains("[SceneData]"))
                        {
                            data = data.Replace("[SceneData]", "");
                            OnSceneDataReceived.Invoke(SceneData.Deserialize(data));
                        }
                    }
                }
            });
        }