WIP network message validation

This commit is contained in:
Regalis11
2015-07-12 18:25:34 +03:00
parent d4c308003b
commit a2636133ca
13 changed files with 199 additions and 73 deletions

View File

@@ -188,13 +188,20 @@ namespace Subsurface.Networking
public override void Update()
{
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if (PlayerInput.KeyHit(Microsoft.Xna.Framework.Input.Keys.K))
{
SendRandomData();
}
if (!connected || updateTimer > DateTime.Now) return;
if (reconnectBox != null)
{
ConnectToServer(serverIP);
return;
}
//if (reconnectBox != null)
//{
// ConnectToServer(serverIP);
// return;
//}
if (Client.ConnectionStatus == NetConnectionStatus.Disconnected)
{
@@ -458,5 +465,39 @@ namespace Subsurface.Networking
Client.SendMessage(msg, NetDeliveryMethod.ReliableUnordered);
}
/// <summary>
/// sends some random data to the server (can be a networkevent or just something completely random)
/// use for debugging purposes
/// </summary>
public void SendRandomData()
{
NetOutgoingMessage msg = Client.CreateMessage();
switch (Rand.Int(4))
{
case 0:
msg.Write((byte)PacketTypes.NetworkEvent);
msg.Write((byte)NetworkEventType.UpdateEntity);
msg.Write(Rand.Int(MapEntity.mapEntityList.Count));
break;
case 1:
msg.Write((byte)PacketTypes.NetworkEvent);
msg.Write((byte)Enum.GetNames(typeof(NetworkEventType)).Length);
msg.Write(Rand.Int(MapEntity.mapEntityList.Count));
break;
case 2:
msg.Write((byte)Enum.GetNames(typeof(PacketTypes)).Length);
break;
}
int byteCount = Rand.Int(100);
for (int i = 0; i<byteCount; i++)
{
msg.Write((Rand.Int(2)==0) ? true : false);
}
Client.SendMessage(msg, (Rand.Int(2)==0) ? NetDeliveryMethod.ReliableOrdered : NetDeliveryMethod.Unreliable);
}
}
}

View File

@@ -91,11 +91,12 @@ namespace Subsurface.Networking
public static bool ReadData(NetIncomingMessage message)
{
NetworkEventType eventType = (NetworkEventType)message.ReadByte();
NetworkEventType eventType;
int id;
try
{
eventType = (NetworkEventType)message.ReadByte();
id = message.ReadInt32();
}
catch
@@ -107,18 +108,15 @@ namespace Subsurface.Networking
Entity e = Entity.FindEntityByID(id);
if (e == null)
{
//DebugConsole.ThrowError("Couldn't find an entity matching the ID ''" + id + "''");
//DebugConsole.ThrowError("Couldn't find an entity matching the ID ''" + id + "''");
return false;
}
//System.Diagnostics.Debug.WriteLine("new message: " + eventType +" - "+e);
e.ReadNetworkData(eventType, message);
return true;
}
}
}

View File

@@ -108,6 +108,7 @@ namespace Subsurface.Networking
public virtual void Update() { }
public virtual void Disconnect() { }
}
enum ChatMessageType