protected SocketMessager Read(Stream stream) { byte[] data = new byte[8]; int bytes = 0; int overs = data.Length; string size = string.Empty; while (overs > 0) { bytes = stream.Read(data, 0, overs); overs -= bytes; size += Encoding.UTF8.GetString(data, 0, bytes); } if (int.TryParse(size, NumberStyles.HexNumber, null, out overs) == false) { return(null); } overs -= data.Length; MemoryStream ms = new MemoryStream(); data = new Byte[1024]; while (overs > 0) { bytes = stream.Read(data, 0, overs < data.Length ? overs : data.Length); overs -= bytes; ms.Write(data, 0, bytes); } data = ms.ToArray(); ms.Close(); return(SocketMessager.Parse(data)); }
private void OnDataAvailable(DataReadInfo dr) { SocketMessager messager = SocketMessager.Parse(dr.ResponseStream.ToArray()); if (string.Compare(messager.Action, SocketMessager.SYS_QUIT.Action) == 0) { dr.AcceptSocket.Close(); } else if (string.Compare(messager.Action, SocketMessager.SYS_TEST_LINK.Action) != 0) { ReceiveEventArgs e = new ReceiveEventArgs(this._receives++, messager, this); SyncReceive receive = null; if (this._receiveHandlers.TryGetValue(messager.Id, out receive)) { this._server._receiveSyncWQ.Enqueue(delegate() { try { receive.ReceiveHandler(this, e); } catch (Exception ex) { this.OnError(ex); } finally { receive.Wait.Set(); } }); } else { this._server._receiveWQ.Enqueue(delegate() { this.OnReceive(e); }); } } this._lastActive = DateTime.Now; HandleDataReceived(); }