EnqueueForDelete() public static method

public static EnqueueForDelete ( IOHandler ioHandler ) : void
ioHandler IOHandler
return void
Example #1
0
        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);
        }
Example #2
0
 public override bool OnEvent(SocketAsyncEventArgs e)
 {
     if (Protocol.IsEnqueueForDelete || Protocol.TimePeriodElapsed())
     {
         return(true);
     }
     Logger.FATAL("Unable to handle TimeElapsed event");
     IOHandlerManager.EnqueueForDelete(this);
     return(false);
 }
Example #3
0
        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);
        }
Example #4
0
 public static bool Connect(EndPoint endpoint, List <ulong> protocolChain, Variant customParameters)
 {
     try
     {
         var socket    = new Socket(endpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
         var connector = new TCPConnector <T>(socket, protocolChain, customParameters);
         if (!connector.Connect(endpoint))
         {
             IOHandlerManager.EnqueueForDelete(connector);
         }
     }
     catch (SocketException)
     {
         return(SignalProtocolCreated(null, customParameters));
     }
     return(true);
 }
Example #5
0
        //public override bool SignalOutputData(MemoryStream ouputStream = null)
        //{
        //    while (Protocol.OutputBuffer!=null)
        //    {
        //        var outputBuffer = Protocol.OutputBuffer;
        //        SocketError errorCode;
        //        var sendCount = OutboundFd.Send(outputBuffer.GetBuffer(),
        //            (int)outputBuffer.Consumed,
        //            (int)outputBuffer.Length, SocketFlags.None, out errorCode);
        //        if (errorCode!=SocketError.Success || sendCount <= 0)
        //        {
        //            Logger.FATAL("Unable to send data.{0}:{1}", NearIP, NearPort);
        //            IOHandlerManager.EnqueueForDelete(this);
        //            break;
        //        }
        //        outputBuffer.Ignore((uint)sendCount);
        //    }
        //    //Protocol.OutputBuffer.Recycle(true);
        //    return true;
        //}
        public override bool SignalOutputData(EndPoint address, MemoryStream outputStream)
        {
            var outputBuffer = new BufferWithOffset(outputStream);

            while (outputBuffer.Length > 0)
            {
                var sendCount = Socket.SendTo(outputBuffer.Buffer,
                                              outputBuffer.Offset,
                                              outputBuffer.Length, SocketFlags.None, address);
                if (sendCount < 0)
                {
                    Logger.FATAL("Unable to send data.{0}:{1}", NearIP, NearPort);
                    IOHandlerManager.EnqueueForDelete(this);
                    break;
                }
                outputBuffer.Offset += sendCount;
            }
            outputStream.SetLength(0);
            return(true);
        }
Example #6
0
        //void DisableWriteData()
        //{
        //    if (!WriteEnabled) return;
        //    _enableWriteDataCalled = false;
        //    Protocol.ReadyForSend();
        //    WriteEnabled = false;
        //    if (_enableWriteDataCalled)
        //    {
        //        WriteEnabled = true;
        //    }
        //}
        public override bool SignalOutputData(MemoryStream s = null)
        {
            //if (!WriteEnabled)
            //{
            //    WriteEnabled = true;
            //}
            WriteEnabled = true;
            if (s == null)
            {
                s = Protocol.OutputBuffer;
            }
            var needToSend = s.Length;
            var buffer     = s.GetBuffer();

            while (Socket.Connected && needToSend > 0)
            {
                try
                {
                    var sendCount = Socket.Send(buffer,
                                                (int)s.Position,
                                                (int)needToSend, SocketFlags.None);
                    if (sendCount <= 0)
                    {
                        throw new Exception("sendCount<=0");
                    }
                    Tx         += sendCount;
                    needToSend -= sendCount;
                    s.Position += sendCount;
                }
                catch (Exception ex)
                {
                    Logger.FATAL("Unable to send data.{0}:{1} -> {2}:{3}", FarIP, FarPort, NearIP,
                                 NearPort);
                    IOHandlerManager.EnqueueForDelete(this);
                    return(false);
                }
            }
            s.SetLength(0);
            WriteEnabled = false;
            return(true);
        }
Example #7
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);
        }