protected override void AcceptCallback(IAsyncResult ar)
        {
            // Get the socket that handles the client request.
            Socket listener = (Socket)ar.AsyncState;

            if (listener != null)
            {
                Socket handler = listener.EndAccept(ar);

                Log.Trace("Connection accepted");
                // Create the state object.
                Log.Trace("Waiting for Hello packet...");
                // FIXME: Add error handling when client doesn't send a hello packet
                handler.Receive(_buffer);
                TPacket receivedPacket = ISerializablePacket.FromBytes <TPacket>(_buffer);
                Log.Debug($"Received: {receivedPacket}");
                Log.Trace("Adding Connection");
                string portAlias = receivedPacket.GetKey();
                ConnectionRegisteredEvent?.Invoke((portAlias, _clientWorkerFactory.GetClientWorker(portAlias, handler)));
                listener.BeginAccept(AcceptCallback, listener);
            }
            else
            {
                Log.Fatal("listener is null in AcceptCallback");
            }
        }
示例#2
0
        protected override void AcceptCallback(IAsyncResult ar)
        {
            // Get the socket that handles the client request.
            Socket listener = (Socket)ar.AsyncState;

            if (listener != null)
            {
                Socket handler = listener.EndAccept(ar);

                Log.Trace("Connection accepted");
                Log.Trace("Waiting for a packet...");
                handler.Receive(_buffer);
                TRequestPacket receivedRequestPacket = ISerializablePacket.FromBytes <TRequestPacket>(_buffer);
                Log.Trace($"Received: {receivedRequestPacket}");
                TResponsePacket responsePacket = OnRequestReceivedEvent(receivedRequestPacket);
                handler.Send(responsePacket.ToBytes());
                handler.Shutdown(SocketShutdown.Both);
                handler.Close();

                listener.BeginAccept(AcceptCallback, listener);
            }
            else
            {
                Log.Fatal("listener is null in AcceptCallback");
            }
        }
 protected override void ReceiveCallback(IAsyncResult ar)
 {
     try
     {
         byte[] buffer    = (byte[])ar.AsyncState;
         int    bytesRead = ClientSocket.EndReceive(ar);
         if (bytesRead > 0)
         {
             TPacket packet = ISerializablePacket.FromBytes <TPacket>(buffer);
             Log.Debug($"Received: {packet}");
             OnMessageReceivedEvent(packet);
         }
     }
     catch (MessagePackSerializationException e)
     {
         Log.Warn(e, $"Could not deserialize MessagePack ({typeof(TPacket).Name}) from received bytes");
     }
     catch (Exception e)
     {
         Log.Error(e, "Error in data receiving");
     }
     finally
     {
         byte[] buffer = new byte[BufferSize];
         ClientSocket.BeginReceive(buffer, 0, BufferSize, SocketFlags.None, ReceiveCallback, buffer);
     }
 }
示例#4
0
        private void ReadCallback(IAsyncResult ar)
        {
            // Retrieve the state object and the handler socket
            // from the asynchronous state object.
            try
            {
                _buffer = (byte[])ar.AsyncState;
                if (_buffer != null)
                {
                    Socket handler = _socket;

                    // Read data from the client socket.
                    int bytesRead = handler.EndReceive(ar);

                    if (bytesRead > 0)
                    {
                        TPacket packet = ISerializablePacket.FromBytes <TPacket>(_buffer);
                        _log.Trace($"Received: {packet}");

                        OnMessageReceived(packet);

                        handler.BeginReceive(_buffer, 0, BufferSize, 0, ReadCallback, _buffer);
                    }
                    else
                    {
                        Disconnect();
                    }
                }
                else
                {
                    _log.Fatal("_buffer.WorkSocket is null in ReadCallback");
                }
            }
            catch (Exception e)
            {
                _log.Debug(e);
                // If exception is thrown, check if socket is connected, because you can start receiving again. If not - Disconnect.
                if (!_socket.Connected)
                {
                    Disconnect();
                }
                else
                {
                    // HERE
                    _socket.BeginReceive(_buffer, 0, BufferSize, 0, ReadCallback, _buffer);
                }
            }
        }
示例#5
0
 protected override void ReceiveCallback(IAsyncResult ar)
 {
     Log.Trace("ReceiveCallback");
     try
     {
         byte[] buffer    = (byte[])ar.AsyncState;
         int    bytesRead = ClientSocket.EndReceive(ar);
         if (bytesRead > 0)
         {
             TResponsePacket packet = ISerializablePacket.FromBytes <TResponsePacket>(buffer);
             Log.Trace($"Received: {packet}");
             OnMessageReceivedEvent(packet);
         }
     }
     catch (MessagePackSerializationException e)
     {
         Log.Warn(e, $"Could not deserialize MessagePack ({typeof(TResponsePacket).Name}) from received bytes");
     }
     catch (Exception e)
     {
         Log.Error(e, "Error in data receiving");
     }
 }