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); }
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); }
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); }
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); }