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