示例#1
0
        private async Task ListenConnectionAsync()
        {
            try
            {
                TcpClient client = await this.Listener.AcceptTcpClientAsync();

                TCPSocketClientState state = new TCPSocketClientState(client);

#pragma warning disable CS4014
                this.ListenAsync(state);
#pragma warning restore CS4014
            }
            catch (Exception e)
            {
                await this.ExceptionHandler.OnExceptionAsync(e);
            }
        }
示例#2
0
        private async Task ListenAsync(TCPSocketClientState state)
        {
            try
            {
                do
                {
                    Stream stream    = state.Stream;
                    int    bytesRead = await stream.ReadAsync(state.Buffer);

                    if (bytesRead <= 0)
                    {
                        TcpState tcpState = state.GetTcpState();
                        if (tcpState != TcpState.Established)
                        {
                            this.Dispatcher.TerminateProcess(state.Name);
                            ProcessUpdateData updateData = new ProcessUpdateData(true, state.Name);
                            await this.Dispatcher.BroadcastMessageAsync(MessageConstants.TERMINATE_IDENTIFIER, updateData.Serialize());

                            return;
                        }

                        state.ClearBuffer();
                        await Task.Delay(10);

                        continue;
                    }

                    string data = Encoding.UTF8.GetString(state.Buffer, 0, bytesRead);
                    state.ClearBuffer();
                    List <Message> msgs = state.Reader.Read(data);

                    await this.Dispatcher.HandleMessagesAsync(state, msgs);

                    // Maximum register payload size is 395 bytes, the client is sending garbage.
                    if (!state.IsRegistered && state.Reader.Size >= 600)
                    {
                        state.Reader.Clear();
                    }
                }while (!state.IsDisposed && state.IsRegistered);
            }
            catch (Exception e)
            {
                await this.ExceptionHandler.OnClientStateExceptionAsync(state, e);
            }
        }