public override bool OnEvent(SocketAsyncEventArgs e)
        {
            e.ReturnPool();
            if (e.SocketError != SocketError.Success)
            {
                return(false);
            }
            var protocol = ProtocolFactoryManager.CreateProtocolChain(_protocolChain, _customParameters);

            if (protocol == null)
            {
                Logger.FATAL("Unable to create protocol chain");
                _closeSocket = true;
                return(false);
            }
            var tcpCarrier = new TCPCarrier(Socket)
            {
                Protocol = protocol.FarEndpoint
            };

            protocol.FarEndpoint.IOHandler = tcpCarrier;
            tcpCarrier.ReadEnabled         = true;
            if (!SignalProtocolCreated(protocol, _customParameters))
            {
                protocol.Dispose();
                _closeSocket = true;
                return(false);
            }
            _success     = true;
            _closeSocket = false;
            IOHandlerManager.EnqueueForDelete(this);
            return(true);
        }
Exemple #2
0
        public bool Accept(SocketAsyncEventArgs socketAsyncEvent)
        {
            if (!_enabled)
            {
                Logger.WARN("Acceptor is not enabled.");
                _droppedCount++;
                return(true);
            }
            Logger.INFO("Client connected:{0}:{1} -> {2}:{3}", (socketAsyncEvent.AcceptSocket.RemoteEndPoint as IPEndPoint).Address.ToString(), (socketAsyncEvent.AcceptSocket.RemoteEndPoint as IPEndPoint).Port, _ipAddress, _port);
            BaseProtocol pProtocol = ProtocolFactoryManager.CreateProtocolChain(_protocolChain, Parameters);

            if (pProtocol == null)
            {
                Logger.FATAL("Unable to create protocol chain");
                socketAsyncEvent.AcceptSocket.Close();
                return(false);
            }
            var pTcpCarrier = new TCPCarrier(socketAsyncEvent.AcceptSocket)
            {
                Protocol    = pProtocol.FarEndpoint,
                ReadEnabled = true
            };

            pProtocol.FarEndpoint.IOHandler = pTcpCarrier;

            //6. Register the protocol stack with an application
            if (Application != null)
            {
                pProtocol             = pProtocol.NearEndpoint;
                pProtocol.Application = Application;
            }

            //if (pProtocol.NearEndpoint.OutputBuffer != null)
            //    pProtocol.NearEndpoint.EnqueueForOutbound();

            if (AcceptEnabled)
            {
                socketAsyncEvent.AcceptSocket = null;
                try
                {
                    if (!Socket.AcceptAsync(socketAsyncEvent))
                    {
                        OnEvent(socketAsyncEvent);
                    }
                }
                catch (Exception ex)
                {
                    Logger.FATAL(ex.Message);
                    return(false);
                }
            }
            else
            {
                socketAsyncEvent.ReturnPool();
            }
            _acceptedCount++;


            return(true);
        }
        public override bool OnEvent(SocketAsyncEventArgs e)
        {
            if (e.SocketError == SocketError.Success)
            {
                switch (e.LastOperation)
                {
                case SocketAsyncOperation.ReceiveFrom:
                    if (e.BytesTransferred > 0)
                    {
                        //Debug.WriteLine("receiveFrom:"+e.BytesTransferred);
                        Rx += e.BytesTransferred;
                    }
                    else
                    {
                        Logger.WARN("socket read data error");
                        return(false);
                    }
                    Protocol.InputBuffer.Published += (uint)e.BytesTransferred;
                    Protocol.SignalInputData(Protocol.InputBuffer, e.RemoteEndPoint as IPEndPoint);
                    if (ReadEnabled)
                    {
                        SetReceiveBuffer(Protocol.InputBuffer, e, 65535);
                        // Protocol.InputBuffer.SetReceiveBuffer(e, 65535);
                        if (!Socket.ReceiveFromAsync(e) && !OnEvent(e))
                        {
                            IOHandlerManager.EnqueueForDelete(this);
                        }
                    }
                    else
                    {
                        ReadEnabled = false;
                        e.ReturnPool();
                    }
                    break;

                case SocketAsyncOperation.Receive:
                    return(false);

                case SocketAsyncOperation.SendTo:
                    return(false);
                }
                return(true);
            }
            Logger.WARN(e.SocketError.ToString());
            return(false);
        }
Exemple #4
0
        public bool OnEvent(SocketAsyncEventArgs e)
        {
            if (e.SocketError == SocketError.Success)
            {
                switch (e.LastOperation)
                {
                case SocketAsyncOperation.ReceiveFrom:
                    if (e.BytesTransferred > 0)
                    {
                        //Debug.WriteLine("receiveFrom:"+e.BytesTransferred);
                    }
                    else
                    {
                        return(false);
                    }
                    InputBuffer.Published += (uint)e.BytesTransferred;
                    ReceiveData?.Invoke(e.RemoteEndPoint as IPEndPoint);
                    if (_readEnabled)
                    {
                        SetReceiveBuffer(InputBuffer, e, 65535);
                        // Protocol.InputBuffer.SetReceiveBuffer(e, 65535);
                        if (!Socket.ReceiveFromAsync(e) && !OnEvent(e))
                        {
                        }
                    }
                    else
                    {
                        ReadEnabled = false;
                        e.ReturnPool();
                    }
                    break;

                case SocketAsyncOperation.Receive:
                    return(false);

                case SocketAsyncOperation.SendTo:
                    return(false);
                }
                return(true);
            }
            Logger.WARN(e.SocketError.ToString());
            return(false);
        }
Exemple #5
0
        public override bool OnEvent(SocketAsyncEventArgs e)
        {
            if (e.SocketError == SocketError.Success)
            {
                switch (e.LastOperation)
                {
                case SocketAsyncOperation.Receive:
                    if (e.BytesTransferred > 0)
                    {
                        Rx += e.BytesTransferred;
                    }
                    else
                    {
                        Logger.WARN("socket read data error");
                        return(false);
                    }
                    //Logger.INFO("rec:{0}",Rx);
                    Protocol.InputBuffer.Published += (uint)e.BytesTransferred;

                    Protocol.SignalInputData(e.BytesTransferred);

                    if (ReadEnabled)
                    {
                        SetReceiveBuffer(Protocol.InputBuffer, e);
                        if (!Socket.ReceiveAsync(e) && !OnEvent(e))
                        {
                            IOHandlerManager.EnqueueForDelete(this);
                        }
                    }
                    else
                    {
                        //ReadEnabled = false;
                        e.ReturnPool();
                    }
                    break;
                    //case SocketAsyncOperation.Send:
                    //    if (Protocol.OutputBuffer == null)
                    //    {
                    //        DisableWriteData();
                    //    }
                    //    else
                    //    {
                    //        if (e.BytesTransferred < 0)
                    //        {
                    //            Logger.FATAL("Unable to send data.{0}:{1} -> {2}:{3}", FarIP, FarPort, NearIP, NearPort);
                    //            IOHandlerManager.EnqueueForDelete(this);
                    //            return false;
                    //        }
                    //        Protocol.OutputBuffer.Ignore((uint)e.BytesTransferred);
                    //       // if(e.BytesTransferred==4096)Logger.Debug("{0}", e.BytesTransferred);
                    //        Tx += e.BytesTransferred;
                    //        if (Protocol.OutputBuffer != null && WriteEnabled)
                    //        {
                    //            SetSendBuffer( Protocol.OutputBuffer,e);
                    //            if (!OutboundFd.SendAsync(e) && !OnEvent(e)) IOHandlerManager.EnqueueForDelete(this);
                    //        }
                    //        else
                    //        {
                    //            DisableWriteData();
                    //            e.ReturnPool();
                    //        }
                    //    }
                    //    break;
                }
                return(true);
            }
            Logger.WARN("{1}({0}):" + e.SocketError, Id, GetType().Name);
            return(false);
        }