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}"); } } }
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)); } } } }); }