Пример #1
0
    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));
    }
Пример #2
0
        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();
        }