Итак, я установил соединение, все работает отлично, и я начинаю настраивать код для чтения пакетов с сервера. Я хочу структурировать его с помощью одного метода идентификатора пакета, который считывает один байт (идентификатор пакета) и разветвляется на соответствующий метод для чтения в остальной части. Проблема заключается в последнем утверждении - все работает, пока я не разветвляюсь, когда получаю это исключение:
Асинхронная операция с сокетом уже выполняется с использованием этого экземпляра SocketAsyncEventArgs.
Вот общая идея:
private void IdentifyPacket(object sender, SocketAsyncEventArgs e)
{
e.Completed -= new EventHandler<SocketAsyncEventArgs>(IdentifyPacket);
if (e.SocketError != SocketError.Success)
{
ForceDisconnectWithError(new SocketErrorEventArgs(netSocket, e.SocketError));
return;
}
PacketID packet = (PacketID)e.Buffer[0];
switch (packet)
{
case PacketID.KeepAlive:
e.SetBuffer(new byte[4], 0, 4);
e.Completed += new EventHandler<SocketAsyncEventArgs>(HandleKeepAlive);
e.ConnectSocket.ReceiveAsync(e);
break;
default:
RelinkPacketManager();
break;
}
}
private void RelinkPacketManager()
{
socketConfig.SetBuffer(new byte[1], 0, 1);
socketConfig.Completed += new EventHandler<SocketAsyncEventArgs>(IdentifyPacket);
netSocket.ReceiveAsync(socketConfig);
}
Мысли