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