You've already forked lidgren-network-gen3
mirror of
https://github.com/lidgren/lidgren-network-gen3.git
synced 2026-05-17 15:46:33 +09:00
Handle ConnectResponse despite connection being in place; to handle dropped handshake messages
This commit is contained in:
@@ -322,43 +322,9 @@ namespace Lidgren.Network
|
|||||||
m_peer.LogDebug("Unhandled Connect: " + tp + ", status is " + m_status + " length: " + payloadLength);
|
m_peer.LogDebug("Unhandled Connect: " + tp + ", status is " + m_status + " length: " + payloadLength);
|
||||||
break;
|
break;
|
||||||
case NetMessageType.ConnectResponse:
|
case NetMessageType.ConnectResponse:
|
||||||
switch (m_status)
|
HandleConnectResponse(now, tp, ptr, payloadLength);
|
||||||
{
|
|
||||||
case NetConnectionStatus.InitiatedConnect:
|
|
||||||
// awesome
|
|
||||||
bool ok = ValidateHandshakeData(ptr, payloadLength, out hail);
|
|
||||||
if (ok)
|
|
||||||
{
|
|
||||||
if (hail != null)
|
|
||||||
{
|
|
||||||
m_remoteHailMessage = m_peer.CreateIncomingMessage(NetIncomingMessageType.Data, hail);
|
|
||||||
m_remoteHailMessage.LengthBits = (hail.Length * 8);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_remoteHailMessage = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_peer.AcceptConnection(this);
|
|
||||||
SendConnectionEstablished();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case NetConnectionStatus.RespondedConnect:
|
|
||||||
// hello, wtf?
|
|
||||||
break;
|
|
||||||
case NetConnectionStatus.Disconnecting:
|
|
||||||
case NetConnectionStatus.Disconnected:
|
|
||||||
case NetConnectionStatus.ReceivedInitiation:
|
|
||||||
case NetConnectionStatus.None:
|
|
||||||
// wtf? anyway, bye!
|
|
||||||
break;
|
|
||||||
case NetConnectionStatus.Connected:
|
|
||||||
// my ConnectionEstablished must have been lost, send another one
|
|
||||||
SendConnectionEstablished();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NetMessageType.ConnectionEstablished:
|
case NetMessageType.ConnectionEstablished:
|
||||||
switch (m_status)
|
switch (m_status)
|
||||||
{
|
{
|
||||||
@@ -421,6 +387,47 @@ namespace Lidgren.Network
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void HandleConnectResponse(double now, NetMessageType tp, int ptr, int payloadLength)
|
||||||
|
{
|
||||||
|
byte[] hail;
|
||||||
|
switch (m_status)
|
||||||
|
{
|
||||||
|
case NetConnectionStatus.InitiatedConnect:
|
||||||
|
// awesome
|
||||||
|
bool ok = ValidateHandshakeData(ptr, payloadLength, out hail);
|
||||||
|
if (ok)
|
||||||
|
{
|
||||||
|
if (hail != null)
|
||||||
|
{
|
||||||
|
m_remoteHailMessage = m_peer.CreateIncomingMessage(NetIncomingMessageType.Data, hail);
|
||||||
|
m_remoteHailMessage.LengthBits = (hail.Length * 8);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_remoteHailMessage = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_peer.AcceptConnection(this);
|
||||||
|
SendConnectionEstablished();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NetConnectionStatus.RespondedConnect:
|
||||||
|
// hello, wtf?
|
||||||
|
break;
|
||||||
|
case NetConnectionStatus.Disconnecting:
|
||||||
|
case NetConnectionStatus.Disconnected:
|
||||||
|
case NetConnectionStatus.ReceivedInitiation:
|
||||||
|
case NetConnectionStatus.None:
|
||||||
|
// wtf? anyway, bye!
|
||||||
|
break;
|
||||||
|
case NetConnectionStatus.Connected:
|
||||||
|
// my ConnectionEstablished must have been lost, send another one
|
||||||
|
SendConnectionEstablished();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private bool ValidateHandshakeData(int ptr, int payloadLength, out byte[] hail)
|
private bool ValidateHandshakeData(int ptr, int payloadLength, out byte[] hail)
|
||||||
{
|
{
|
||||||
hail = null;
|
hail = null;
|
||||||
|
|||||||
@@ -379,6 +379,26 @@ namespace Lidgren.Network
|
|||||||
|
|
||||||
switch (tp)
|
switch (tp)
|
||||||
{
|
{
|
||||||
|
case NetMessageType.Connect:
|
||||||
|
m_peer.LogDebug("Received handshake message (" + tp + ") despite connection being in place");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NetMessageType.ConnectResponse:
|
||||||
|
// handshake message must have been lost
|
||||||
|
HandleConnectResponse(now, tp, ptr, payloadLength);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NetMessageType.ConnectionEstablished:
|
||||||
|
// do nothing, all's well
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NetMessageType.LibraryError:
|
||||||
|
#if DEBUG
|
||||||
|
throw new NetException("LibraryError received by ReceivedLibraryMessage; this usually indicates a malformed message");
|
||||||
|
#else
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
case NetMessageType.Disconnect:
|
case NetMessageType.Disconnect:
|
||||||
NetIncomingMessage msg = m_peer.SetupReadHelperMessage(ptr, payloadLength);
|
NetIncomingMessage msg = m_peer.SetupReadHelperMessage(ptr, payloadLength);
|
||||||
ExecuteDisconnect(msg.ReadString(), false);
|
ExecuteDisconnect(msg.ReadString(), false);
|
||||||
|
|||||||
Reference in New Issue
Block a user