network errors

This commit is contained in:
JohnCorby 2025-02-25 19:32:08 -08:00
parent 1acebc44cd
commit 8ba823cb79
2 changed files with 69 additions and 99 deletions

View File

@ -71,7 +71,7 @@ public static class Util
if (transport.DoFakeNetworkErrors) if (transport.DoFakeNetworkErrors)
{ {
var floatHandle = GCHandle.Alloc((float)50, GCHandleType.Pinned); var floatHandle = GCHandle.Alloc((float)50, GCHandleType.Pinned);
var intHandle = GCHandle.Alloc((int)500, GCHandleType.Pinned); var intHandle = GCHandle.Alloc((int)100, GCHandleType.Pinned);
// global scope = dont apply to connection // global scope = dont apply to connection
SteamNetworkingUtils.SetConfigValue( SteamNetworkingUtils.SetConfigValue(
@ -88,101 +88,66 @@ public static class Util
ESteamNetworkingConfigDataType.k_ESteamNetworkingConfig_Float, ESteamNetworkingConfigDataType.k_ESteamNetworkingConfig_Float,
floatHandle.AddrOfPinnedObject() floatHandle.AddrOfPinnedObject()
); );
/*
result.Add(new SteamNetworkingConfigValue_t
{
m_eValue = ESteamNetworkingConfigValue.k_ESteamNetworkingConfig_FakePacketLoss_Send,
m_eDataType = ESteamNetworkingConfigDataType.k_ESteamNetworkingConfig_Float,
m_val = new SteamNetworkingConfigValue_t.OptionValue
{
m_float = 50
}
});
result.Add(new SteamNetworkingConfigValue_t
{
m_eValue = ESteamNetworkingConfigValue.k_ESteamNetworkingConfig_FakePacketLoss_Recv,
m_eDataType = ESteamNetworkingConfigDataType.k_ESteamNetworkingConfig_Float,
m_val = new SteamNetworkingConfigValue_t.OptionValue
{
m_float = 50
}
});
result.Add(new SteamNetworkingConfigValue_t SteamNetworkingUtils.SetConfigValue(
{ ESteamNetworkingConfigValue.k_ESteamNetworkingConfig_FakePacketLag_Send,
m_eValue = ESteamNetworkingConfigValue.k_ESteamNetworkingConfig_FakePacketLag_Send, ESteamNetworkingConfigScope.k_ESteamNetworkingConfig_Global,
m_eDataType = ESteamNetworkingConfigDataType.k_ESteamNetworkingConfig_Int32, IntPtr.Zero,
m_val = new SteamNetworkingConfigValue_t.OptionValue ESteamNetworkingConfigDataType.k_ESteamNetworkingConfig_Int32,
{ intHandle.AddrOfPinnedObject()
m_int32 = 500 );
} SteamNetworkingUtils.SetConfigValue(
}); ESteamNetworkingConfigValue.k_ESteamNetworkingConfig_FakePacketLag_Recv,
result.Add(new SteamNetworkingConfigValue_t ESteamNetworkingConfigScope.k_ESteamNetworkingConfig_Global,
{ IntPtr.Zero,
m_eValue = ESteamNetworkingConfigValue.k_ESteamNetworkingConfig_FakePacketLag_Recv, ESteamNetworkingConfigDataType.k_ESteamNetworkingConfig_Int32,
m_eDataType = ESteamNetworkingConfigDataType.k_ESteamNetworkingConfig_Int32, intHandle.AddrOfPinnedObject()
m_val = new SteamNetworkingConfigValue_t.OptionValue );
{
m_int32 = 500
}
});
result.Add(new SteamNetworkingConfigValue_t SteamNetworkingUtils.SetConfigValue(
{ ESteamNetworkingConfigValue.k_ESteamNetworkingConfig_FakePacketReorder_Send,
m_eValue = ESteamNetworkingConfigValue.k_ESteamNetworkingConfig_FakePacketReorder_Send, ESteamNetworkingConfigScope.k_ESteamNetworkingConfig_Global,
m_eDataType = ESteamNetworkingConfigDataType.k_ESteamNetworkingConfig_Float, IntPtr.Zero,
m_val = new SteamNetworkingConfigValue_t.OptionValue ESteamNetworkingConfigDataType.k_ESteamNetworkingConfig_Float,
{ floatHandle.AddrOfPinnedObject()
m_float = 50 );
} SteamNetworkingUtils.SetConfigValue(
}); ESteamNetworkingConfigValue.k_ESteamNetworkingConfig_FakePacketReorder_Recv,
result.Add(new SteamNetworkingConfigValue_t ESteamNetworkingConfigScope.k_ESteamNetworkingConfig_Global,
{ IntPtr.Zero,
m_eValue = ESteamNetworkingConfigValue.k_ESteamNetworkingConfig_FakePacketReorder_Recv, ESteamNetworkingConfigDataType.k_ESteamNetworkingConfig_Float,
m_eDataType = ESteamNetworkingConfigDataType.k_ESteamNetworkingConfig_Float, floatHandle.AddrOfPinnedObject()
m_val = new SteamNetworkingConfigValue_t.OptionValue );
{ SteamNetworkingUtils.SetConfigValue(
m_float = 50 ESteamNetworkingConfigValue.k_ESteamNetworkingConfig_FakePacketReorder_Time,
} ESteamNetworkingConfigScope.k_ESteamNetworkingConfig_Global,
}); IntPtr.Zero,
result.Add(new SteamNetworkingConfigValue_t ESteamNetworkingConfigDataType.k_ESteamNetworkingConfig_Int32,
{ intHandle.AddrOfPinnedObject()
m_eValue = ESteamNetworkingConfigValue.k_ESteamNetworkingConfig_FakePacketReorder_Time, );
m_eDataType = ESteamNetworkingConfigDataType.k_ESteamNetworkingConfig_Int32,
m_val = new SteamNetworkingConfigValue_t.OptionValue SteamNetworkingUtils.SetConfigValue(
{ ESteamNetworkingConfigValue.k_ESteamNetworkingConfig_FakePacketDup_Send,
m_int32 = 500 ESteamNetworkingConfigScope.k_ESteamNetworkingConfig_Global,
} IntPtr.Zero,
}); ESteamNetworkingConfigDataType.k_ESteamNetworkingConfig_Float,
floatHandle.AddrOfPinnedObject()
);
SteamNetworkingUtils.SetConfigValue(
ESteamNetworkingConfigValue.k_ESteamNetworkingConfig_FakePacketDup_Recv,
ESteamNetworkingConfigScope.k_ESteamNetworkingConfig_Global,
IntPtr.Zero,
ESteamNetworkingConfigDataType.k_ESteamNetworkingConfig_Float,
floatHandle.AddrOfPinnedObject()
);
SteamNetworkingUtils.SetConfigValue(
ESteamNetworkingConfigValue.k_ESteamNetworkingConfig_FakePacketDup_TimeMax,
ESteamNetworkingConfigScope.k_ESteamNetworkingConfig_Global,
IntPtr.Zero,
ESteamNetworkingConfigDataType.k_ESteamNetworkingConfig_Int32,
intHandle.AddrOfPinnedObject()
);
result.Add(new SteamNetworkingConfigValue_t
{
m_eValue = ESteamNetworkingConfigValue.k_ESteamNetworkingConfig_FakePacketDup_Send,
m_eDataType = ESteamNetworkingConfigDataType.k_ESteamNetworkingConfig_Float,
m_val = new SteamNetworkingConfigValue_t.OptionValue
{
m_float = 50
}
});
result.Add(new SteamNetworkingConfigValue_t
{
m_eValue = ESteamNetworkingConfigValue.k_ESteamNetworkingConfig_FakePacketDup_Recv,
m_eDataType = ESteamNetworkingConfigDataType.k_ESteamNetworkingConfig_Float,
m_val = new SteamNetworkingConfigValue_t.OptionValue
{
m_float = 50
}
});
result.Add(new SteamNetworkingConfigValue_t
{
m_eValue = ESteamNetworkingConfigValue.k_ESteamNetworkingConfig_FakePacketDup_TimeMax,
m_eDataType = ESteamNetworkingConfigDataType.k_ESteamNetworkingConfig_Int32,
m_val = new SteamNetworkingConfigValue_t.OptionValue
{
m_int32 = 500
}
});
*/
floatHandle.Free(); floatHandle.Free();
intHandle.Free(); intHandle.Free();
} }

View File

@ -73,12 +73,13 @@ public static class Program
transport.TestIpAddress = "127.0.0.1:1234"; transport.TestIpAddress = "127.0.0.1:1234";
// make timeout for client detecting server drop different than timeout for server detecting client drop // make timeout for client detecting server drop different than timeout for server detecting client drop
transport.Timeout = 5000; transport.Timeout = 5000;
transport.DoFakeNetworkErrors = false; transport.DoFakeNetworkErrors = true;
transport.OnServerError = (conn, error, s) => Console.Error.WriteLine($"ERROR {conn} {error} {s}"); transport.OnServerError = (conn, error, s) => Console.Error.WriteLine($"ERROR {conn} {error} {s}");
var theConn = -1; var theConn = -1;
transport.OnServerConnected = conn => theConn = conn; transport.OnServerConnected = conn => theConn = conn;
transport.OnServerDataReceived = (conn, bytes, i) => Console.WriteLine($"RECV {conn} {bytes.Join()} {i}"); transport.OnServerDataSent = (conn, bytes, i) => Console.WriteLine($"SEND {conn} {i} {bytes.Join()}");
transport.OnServerDataReceived = (conn, bytes, i) => Console.WriteLine($"RECV {conn} {i} {bytes.Join()}");
transport.ServerStart(); transport.ServerStart();
@ -94,7 +95,9 @@ public static class Program
switch (Console.ReadKey(true).KeyChar) switch (Console.ReadKey(true).KeyChar)
{ {
case 'q': case 'q':
running = false; // running = false;
transport.ServerDisconnect(theConn); // mirror does this for us
transport.ServerStop();
break; break;
case 's': case 's':
transport.ServerSend(theConn, new ArraySegment<byte>(new byte[] { 1, 2, 3, 4, 5 }, 1, 5 - 1)); transport.ServerSend(theConn, new ArraySegment<byte>(new byte[] { 1, 2, 3, 4, 5 }, 1, 5 - 1));
@ -125,7 +128,8 @@ public static class Program
transport.DoFakeNetworkErrors = true; transport.DoFakeNetworkErrors = true;
transport.OnClientError = (error, s) => Console.Error.WriteLine($"ERROR {error} {s}"); transport.OnClientError = (error, s) => Console.Error.WriteLine($"ERROR {error} {s}");
transport.OnClientDataReceived = (bytes, i) => Console.WriteLine($"RECV {bytes.Join()} {i}"); transport.OnClientDataSent = (bytes, i) => Console.WriteLine($"SEND {i} {bytes.Join()}");
transport.OnClientDataReceived = (bytes, i) => Console.WriteLine($"RECV {i} {bytes.Join()}");
transport.ClientConnect("76561198150564286"); transport.ClientConnect("76561198150564286");
@ -134,7 +138,7 @@ public static class Program
Console.WriteLine("press q to quit, s to send"); Console.WriteLine("press q to quit, s to send");
var running = true; var running = true;
transport.OnClientDisconnected = () => running = false; // mirror normally does this // transport.OnClientDisconnected = () => running = false; // mirror normally does this
while (running) while (running)
{ {
transport.ClientEarlyUpdate(); transport.ClientEarlyUpdate();
@ -143,7 +147,8 @@ public static class Program
switch (Console.ReadKey(true).KeyChar) switch (Console.ReadKey(true).KeyChar)
{ {
case 'q': case 'q':
running = false; // running = false;
transport.ClientDisconnect();
break; break;
case 's': case 's':
transport.ClientSend(new ArraySegment<byte>(new byte[] { 1, 2, 3, 4, 5 }, 1, 5 - 1)); transport.ClientSend(new ArraySegment<byte>(new byte[] { 1, 2, 3, 4, 5 }, 1, 5 - 1));