Exemplo n.º 1
0
        private void ReceiveCallback(IAsyncResult result)
        {
            var client = (Client)result.AsyncState;

            try
            {
                //var client = _clients.Find(s => s.Socket == result.AsyncState);
                var received = client.Socket.EndReceive(result);
                if (received == 0)
                {
                    return;
                }
                //Turn message into a request
                var req = Encoding.Default.GetString(client.Buffer, 0, received);
                OnMessageReceived(new MessageEventArgs()
                {
                    Message = req,
                    From    = client.Socket.RemoteEndPoint.ToString(),
                    To      = client.Socket.LocalEndPoint.ToString(),
                    Type    = "request"
                });
                SendResponse(HttpRequest.Parse(req), client);
            }
            catch (ObjectDisposedException) { }
            catch (Exception e)
            {
                Debug.WriteLine(e.Message);
#if DEBUG
                throw;
#endif
            }
            finally
            {
                OnConnectionLost(client);
                client.Socket.Shutdown(SocketShutdown.Both);
                client.Socket.Close();
            }
        }