コード例 #1
0
ファイル: UdpIO.cs プロジェクト: langhuihui/csharprtmp
 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;
 }
コード例 #2
0
ファイル: TCPCarrier.cs プロジェクト: langhuihui/csharprtmp
        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;
        }
コード例 #3
0
ファイル: TCPAcceptor.cs プロジェクト: langhuihui/csharprtmp
        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;
        }
コード例 #4
0
ファイル: UDPCarrier.cs プロジェクト: langhuihui/csharprtmp
 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;
 }