public PlainWebSocketConn(bool asClient) : base(asClient) { //------------------- //send,resp _sockAsyncSender = new SocketAsyncEventArgs(); _sockAsyncSender.SetBuffer(new byte[RECV_BUFF_SIZE], 0, RECV_BUFF_SIZE); _sendIO = new SendIO(_sockAsyncSender, 0, RECV_BUFF_SIZE, HandleSendCompleted); _sockAsyncSender.Completed += new EventHandler <SocketAsyncEventArgs>((s, e) => { switch (e.LastOperation) { default: { } break; case SocketAsyncOperation.Send: { _sendIO.ProcessWaitingData(); } break; case SocketAsyncOperation.Receive: { } break; } }); _webSocketResp = new WebSocketResponse(_connectionId, asClient, this); //------------------------------------------------------------------------------------ //recv,req ,new socket _sockAsyncListener = new SocketAsyncEventArgs(); _sockAsyncListener.SetBuffer(new byte[RECV_BUFF_SIZE], 0, RECV_BUFF_SIZE); _recvIO = new RecvIO(_sockAsyncListener, 0, RECV_BUFF_SIZE, HandleReceivedData); RecvIOBufferStream recvIOStream = new RecvIOBufferStream(); _webSocketReqParser = new WebSocketProtocolParser(this, recvIOStream); _webSocketReqParser.SetNewParseResultHandler(req => { WebSocketReqInputQueue.Enqueue(new WebSocketReqQueueItem(this, req)); }); _sockAsyncListener.Completed += new EventHandler <SocketAsyncEventArgs>((s, e) => { switch (e.LastOperation) { default: { } break; case SocketAsyncOperation.Send: { } break; case SocketAsyncOperation.Receive: { //copy data and write to recvIO stream int recvByteCount = e.BytesTransferred; if (recvByteCount > 0) { //TODO byte[] tmp1 = new byte[recvByteCount]; Buffer.BlockCopy(e.Buffer, 0, tmp1, 0, recvByteCount); recvIOStream.WriteData(tmp1, recvByteCount); _recvIO.ProcessReceivedData(); } } break; } }); //------------------------------------------------------------------------------------ }
internal WebSocketProtocolParser(WebSocketConnectionBase owner, RecvIOBufferStream recvBufferStream) { OwnerWebSocketConnBase = owner; _asClientContext = owner.AsClientContext; _myBufferStream = recvBufferStream; }
internal WebSocketProtocolParser(WebSocketContext context, RecvIO recvIO) { this.recvIO = recvIO; this._ownerContext = context; myBufferStream = new RecvIOBufferStream(recvIO); }