private bool ReadMessage(List<IScsMessage> messages) { Stream.Position = 0; if (Stream.Length < 4) return false; byte[] headerBytes = new byte[4]; Stream.Read(headerBytes, 0, 4); int length = BitConverter.ToUInt16(headerBytes, 0); if (Stream.Length < length) return false; GameMessage message = new GameMessage { OpCode = BitConverter.ToInt16(headerBytes, 2), Data = new byte[length - 4] }; Stream.Read(message.Data, 0, message.Data.Length); messages.Add(message); TrimStream(); return true; }
private bool Send() { GameMessage message; if (SendLock == null) return false; lock (SendLock) { if (SendData.Count == 0) return Client.CommunicationState == CommunicationStates.Connected; message = new GameMessage {Data = new byte[SendDataSize]}; int pointer = 0; for (int i = 0; i < SendData.Count; i++) { Array.Copy(SendData[i], 0, message.Data, pointer, SendData[i].Length); pointer += SendData[i].Length; } SendData.Clear(); SendDataSize = 0; } try { Client.SendMessage(message); } catch { //Already closed return false; } return true; }