diff --git a/Lidgren.Network/NetConnection.Handshake.cs b/Lidgren.Network/NetConnection.Handshake.cs
index c5848f8..8a2e421 100644
--- a/Lidgren.Network/NetConnection.Handshake.cs
+++ b/Lidgren.Network/NetConnection.Handshake.cs
@@ -76,11 +76,12 @@ namespace Lidgren.Network
SendConnectResponse(now, true);
break;
case NetConnectionStatus.None:
- if (m_peerConfiguration.IsMessageTypeEnabled(NetIncomingMessageType.ConnectionApproval))
- break; // we're probably waiting for connection approval here
m_peer.LogWarning("Time to resend handshake, but status is " + m_status);
break;
-
+ case NetConnectionStatus.RespondedAwaitingApproval:
+ // awaiting approval
+ m_lastHandshakeSendTime = now; // postpone handshake resend
+ break;
default:
m_peer.LogWarning("Time to resend handshake, but status is " + m_status);
break;
@@ -212,6 +213,12 @@ namespace Lidgren.Network
///
public void Approve()
{
+ if (m_status != NetConnectionStatus.RespondedAwaitingApproval)
+ {
+ m_peer.LogWarning("Approve() called in wrong status; expected RespondedAwaitingApproval; got " + m_status);
+ return;
+ }
+
m_localHailMessage = null;
m_handshakeAttempts = 0;
SendConnectResponse((float)NetTime.Now, false);
@@ -223,6 +230,12 @@ namespace Lidgren.Network
/// The local hail message that will be set as RemoteHailMessage on the remote host
public void Approve(NetOutgoingMessage localHail)
{
+ if (m_status != NetConnectionStatus.RespondedAwaitingApproval)
+ {
+ m_peer.LogWarning("Approve() called in wrong status; expected RespondedAwaitingApproval; got " + m_status);
+ return;
+ }
+
m_localHailMessage = localHail;
m_handshakeAttempts = 0;
SendConnectResponse((float)NetTime.Now, false);
@@ -283,6 +296,7 @@ namespace Lidgren.Network
if (m_remoteHailMessage != null)
appMsg.Write(m_remoteHailMessage.m_data, 0, m_remoteHailMessage.LengthBytes);
m_peer.ReleaseMessage(appMsg);
+ SetStatus(NetConnectionStatus.RespondedAwaitingApproval, "Awaiting approval");
return;
}
@@ -290,6 +304,11 @@ namespace Lidgren.Network
}
return;
}
+ if (m_status == NetConnectionStatus.RespondedAwaitingApproval)
+ {
+ m_peer.LogWarning("Ignoring multiple Connect() most likely due to a delayed Approval");
+ return;
+ }
if (m_status == NetConnectionStatus.RespondedConnect)
{
// our ConnectResponse must have been lost
diff --git a/Lidgren.Network/NetConnectionStatus.cs b/Lidgren.Network/NetConnectionStatus.cs
index 88742b5..0821638 100644
--- a/Lidgren.Network/NetConnectionStatus.cs
+++ b/Lidgren.Network/NetConnectionStatus.cs
@@ -35,6 +35,11 @@ namespace Lidgren.Network
///
InitiatedConnect,
+ ///
+ /// Connect was received and ApprovalMessage released to the application; awaiting Approve() or Deny()
+ ///
+ RespondedAwaitingApproval, // We got Connect, released ApprovalMessage
+
///
/// Connect was received and ConnectResponse has been sent; waiting for ConnectionEstablished
///
diff --git a/Lidgren.Network/NetReliableOrderedReceiver.cs b/Lidgren.Network/NetReliableOrderedReceiver.cs
index 1c51599..691e5f2 100644
--- a/Lidgren.Network/NetReliableOrderedReceiver.cs
+++ b/Lidgren.Network/NetReliableOrderedReceiver.cs
@@ -37,7 +37,7 @@ namespace Lidgren.Network
//
// excellent, right on time
//
- m_peer.LogVerbose("Received RIGHT-ON-TIME " + message);
+ //m_peer.LogVerbose("Received RIGHT-ON-TIME " + message);
AdvanceWindow();
m_peer.ReleaseMessage(message);
diff --git a/Lidgren.Network/NetReliableUnorderedReceiver.cs b/Lidgren.Network/NetReliableUnorderedReceiver.cs
index 5d3a2d8..876e3bd 100644
--- a/Lidgren.Network/NetReliableUnorderedReceiver.cs
+++ b/Lidgren.Network/NetReliableUnorderedReceiver.cs
@@ -35,7 +35,7 @@ namespace Lidgren.Network
//
// excellent, right on time
//
- m_peer.LogVerbose("Received RIGHT-ON-TIME " + message);
+ //m_peer.LogVerbose("Received RIGHT-ON-TIME " + message);
AdvanceWindow();
m_peer.ReleaseMessage(message);
diff --git a/Samples/ImageSample/ImageClient/ImageGetter.cs b/Samples/ImageSample/ImageClient/ImageGetter.cs
index 92dc1dd..4285fdf 100644
--- a/Samples/ImageSample/ImageClient/ImageGetter.cs
+++ b/Samples/ImageSample/ImageClient/ImageGetter.cs
@@ -26,6 +26,7 @@ namespace ImageClient
NetPeerConfiguration config = copyConfig.Clone();
config.EnableMessageType(NetIncomingMessageType.DiscoveryResponse);
+ config.EnableMessageType(NetIncomingMessageType.DebugMessage);
m_readList = new List();
Client = new NetClient(config);
diff --git a/Samples/ImageSample/ImageServer/Program.cs b/Samples/ImageSample/ImageServer/Program.cs
index 7584e86..f2bbba8 100644
--- a/Samples/ImageSample/ImageServer/Program.cs
+++ b/Samples/ImageSample/ImageServer/Program.cs
@@ -26,6 +26,7 @@ namespace ImageServer
NetPeerConfiguration config = new NetPeerConfiguration("ImageTransfer");
config.EnableMessageType(NetIncomingMessageType.ConnectionApproval);
config.EnableMessageType(NetIncomingMessageType.DiscoveryRequest);
+ config.EnableMessageType(NetIncomingMessageType.DebugMessage);
config.AutoExpandMTU = true;
// listen on port 14242
@@ -33,9 +34,6 @@ namespace ImageServer
Server = new NetServer(config);
- System.IO.File.Delete("C:\\tmp\\clientlog.txt");
- System.IO.File.Delete("C:\\tmp\\serverlog.txt");
-
Application.Idle += new EventHandler(AppLoop);
Application.Run(MainForm);
}
@@ -58,7 +56,6 @@ namespace ImageServer
// just print any message
string str = inc.ReadString();
NativeMethods.AppendText(MainForm.richTextBox1, str);
- //System.IO.File.AppendAllText("C:\\tmp\\serverlog.txt", str + Environment.NewLine);
break;
case NetIncomingMessageType.DiscoveryRequest:
NetOutgoingMessage dom = Server.CreateMessage();
@@ -110,13 +107,14 @@ namespace ImageServer
}
*/
+ //
+ // A client connected; send the entire image in one very large message that will be fragmented automatically by the library
+ //
NetOutgoingMessage om = Server.CreateMessage(ImageData.Length + 5);
om.Write((ushort)ImageWidth);
om.Write((ushort)ImageHeight);
om.WriteVariableUInt32(0);
-
- // send entire as a large message that will be automatically fragmented by the library
om.Write(ImageData);
Server.SendMessage(om, inc.SenderConnection, NetDeliveryMethod.ReliableOrdered, 0);