public void SendPacket(StreamBuffer buffer, PacketPredicate predicate, IOEventHandler dispatcher, Action<StreamBuffer> onSent = null)
{
if (predicate == null || dispatcher == null)
throw new AegisException(AegisResult.InvalidArgument, "The argument predicate and dispatcher cannot be null.");
try
{
lock (_session)
{
_responseSelector.Add(predicate, dispatcher);
if (_session.Socket != null)
{
// ReadIndex가 OnSocket_Send에서 사용되므로 ReadIndex를 초기화해야 한다.
buffer.ResetReadIndex();
if (onSent == null)
_session.Socket.BeginSend(buffer.Buffer, 0, buffer.WrittenBytes, SocketFlags.None, Socket_Send, null);
else
_session.Socket.BeginSend(buffer.Buffer, 0, buffer.WrittenBytes, SocketFlags.None, Socket_Send,
new NetworkSendToken(buffer, onSent));
}
}
}
catch (SocketException)
{
}
catch (Exception e)
{
Logger.Err(LogMask.Aegis, e.ToString());
}
}