diff --git a/TicTacToe.csproj b/TicTacToe.csproj
index a543f20..04db211 100644
--- a/TicTacToe.csproj
+++ b/TicTacToe.csproj
@@ -56,6 +56,7 @@
+
diff --git a/scripts/MainMenu.cs b/scripts/MainMenu.cs
index be907e8..1aa173b 100644
--- a/scripts/MainMenu.cs
+++ b/scripts/MainMenu.cs
@@ -1,7 +1,7 @@
using Godot;
using System;
using Network;
-using Util;
+using Network.PacketHandling;
public class MainMenu : Panel {
@@ -47,7 +47,6 @@ public class MainMenu : Panel {
}
port = defaultPort;
if (PortEdit != null && PortEdit.GetText() != "") {
- //port = PortEdit.GetText();
int temp_port;
Int32.TryParse(PortEdit.GetText(), out temp_port);
if (temp_port > 80) {
diff --git a/scripts/net/Client.cs b/scripts/net/Client.cs
index bb5907b..3811177 100644
--- a/scripts/net/Client.cs
+++ b/scripts/net/Client.cs
@@ -1,5 +1,6 @@
using Godot;
using Network.PacketHandling;
+using System;
namespace Network {
public class Client : Peer {
@@ -13,7 +14,7 @@ namespace Network {
public Client(PacketPeerUDP packetPeer) : base(packetPeer) {
PacketPeer = packetPeer;
- TempBuffer = NewPacketBuffer();
+ TempBuffer = PacketBuffer.Create();
TempBuffer.Write(1);
}
diff --git a/scripts/net/Peer.cs b/scripts/net/Peer.cs
index 6e7ec9e..b29abd3 100644
--- a/scripts/net/Peer.cs
+++ b/scripts/net/Peer.cs
@@ -11,8 +11,6 @@ namespace Network {
private int LastConnectionSended = -1;
private Thread ListenerThread;
- private static byte[] ConfirmationBytes = { 154, 211 };
-
public ConnectionList ConnectionList;
public Peer(PacketPeerUDP packetPeer) {
@@ -47,14 +45,6 @@ namespace Network {
return true;
}
- public static PacketBuffer NewPacketBuffer() {
- PacketBuffer PB = new PacketBuffer();
- foreach (byte B in ConfirmationBytes) {
- PB.Write(B);
- }
- return PB;
- }
-
private static void ListenerThreadMethod() {
GD.print("Started Listener Thread.");
@@ -66,9 +56,9 @@ namespace Network {
int Port = PacketPeer.GetPacketPort();
PacketBuffer PB = PacketBuffer.FromByteBuffer(Buffer);
- if (PB.Length > ConfirmationBytes.Length) {
+ if (PB.Length > PacketBuffer.ConfirmationBytes.Length) {
bool Confirmed = true;
- foreach (byte B in ConfirmationBytes) {
+ foreach (byte B in PacketBuffer.ConfirmationBytes) {
if (PB.Read() != B) {
// Ignore packet, confirmation bytes don't match up.
Confirmed = false;
diff --git a/scripts/net/Server.cs b/scripts/net/Server.cs
index 769a74a..f074fc9 100644
--- a/scripts/net/Server.cs
+++ b/scripts/net/Server.cs
@@ -11,8 +11,12 @@ namespace Network {
public Server(PacketPeerUDP packetPeer) : base(packetPeer) {
PacketPeer = packetPeer;
- TempBuffer = NewPacketBuffer();
- TempBuffer.Write(2);
+ TempBuffer = PacketBuffer.Create();
+ TempBuffer.Write(150);
+ TempBuffer.Write(145);
+ TempBuffer.Write(154);
+ TempBuffer.Write(154);
+ TempBuffer.Write(157);
}
public override void Initialize(string address, int port) {
diff --git a/scripts/net/packethandling/PacketBuffer.cs b/scripts/net/packethandling/PacketBuffer.cs
index edb22dc..d0a9c47 100644
--- a/scripts/net/packethandling/PacketBuffer.cs
+++ b/scripts/net/packethandling/PacketBuffer.cs
@@ -7,6 +7,8 @@ namespace Network.PacketHandling {
private List ByteList = new List();
private int ReadCounter = 0;
+ public static byte[] ConfirmationBytes = { 154, 211 };
+
public byte[] ByteBuffer { get { return ByteList.ToArray(); } }
public int Length { get { return ByteList.Count; } }
public bool HasNext { get { return ReadCounter < ByteList.Count; } }
@@ -19,15 +21,43 @@ namespace Network.PacketHandling {
return ByteList[ReadCounter++];
}
+ public short ReadShort() { return PrimitiveSerializer.DeserializeShort(this); }
+
+ public int ReadInt() { return PrimitiveSerializer.DeserializeInt(this); }
+
+ public long ReadLong() { return PrimitiveSerializer.DeserializeLong(this); }
+
+ public float ReadFloat() { return PrimitiveSerializer.DeserializeFloat(this); }
+
+ public string ReadString() { return PrimitiveSerializer.DeserializeString(this); }
+
public void Write(byte toWrite) {
ByteList.Add(toWrite);
}
+ public void Write(short toWrite) { PrimitiveSerializer.SerializeShort(toWrite, this); }
+
+ public void Write(int toWrite) { PrimitiveSerializer.SerializeInt(toWrite, this); }
+
+ public void Write(long toWrite) { PrimitiveSerializer.SerializeLong(toWrite, this); }
+
+ public void Write(float toWrite) { PrimitiveSerializer.SerializeFloat(toWrite, this); }
+
+ public void Write(string toWrite) { PrimitiveSerializer.SerializeString(toWrite, this); }
+
public static PacketBuffer FromByteBuffer(byte[] byteBuffer) {
PacketBuffer PB = new PacketBuffer();
PB.ByteList = new List(byteBuffer);
return PB;
}
+ public static PacketBuffer Create() {
+ PacketBuffer PB = new PacketBuffer();
+ foreach (byte B in ConfirmationBytes) {
+ PB.Write(B);
+ }
+ return PB;
+ }
+
}
}
\ No newline at end of file
diff --git a/scripts/net/packethandling/PrimitiveSerializer.cs b/scripts/net/packethandling/PrimitiveSerializer.cs
new file mode 100644
index 0000000..6fac7fd
--- /dev/null
+++ b/scripts/net/packethandling/PrimitiveSerializer.cs
@@ -0,0 +1,89 @@
+
+
+using Godot;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Network.PacketHandling {
+ public static class PrimitiveSerializer {
+
+ public static byte[] GetBytes(PacketBuffer packetBuffer, int size) {
+ List Bytes = new List();
+ for (int i = 0; i < size; i++) {
+ Bytes.Add(packetBuffer.Read());
+ }
+ return Bytes.ToArray();
+ }
+
+ public static void SerializeShort(short serializable, PacketBuffer packetBuffer) {
+ byte[] Bytes = BitConverter.GetBytes(serializable);
+ foreach (byte B in Bytes) {
+ packetBuffer.Write(B);
+ }
+ }
+
+ public static short DeserializeShort(PacketBuffer packetBuffer) {
+ return BitConverter.ToInt16(GetBytes(packetBuffer, 2), 0);
+ }
+
+ public static void SerializeInt(int serializable, PacketBuffer packetBuffer) {
+ byte[] Bytes = BitConverter.GetBytes(serializable);
+ foreach (byte B in Bytes) {
+ packetBuffer.Write(B);
+ }
+ }
+
+ public static int DeserializeInt(PacketBuffer packetBuffer) {
+ return BitConverter.ToInt32(GetBytes(packetBuffer, 4), 0);
+ }
+
+ public static void SerializeLong(long serializable, PacketBuffer packetBuffer) {
+ byte[] Bytes = BitConverter.GetBytes(serializable);
+ foreach (byte B in Bytes) {
+ packetBuffer.Write(B);
+ }
+ }
+
+ public static long DeserializeLong(PacketBuffer packetBuffer) {
+ return BitConverter.ToInt64(GetBytes(packetBuffer, 8), 0);
+ }
+
+ public static void SerializeFloat(float serializable, PacketBuffer packetBuffer) {
+ byte[] Bytes = BitConverter.GetBytes(serializable);
+ foreach (byte B in Bytes) {
+ packetBuffer.Write(B);
+ }
+ }
+
+ public static float DeserializeFloat(PacketBuffer packetBuffer) {
+ return BitConverter.ToSingle(GetBytes(packetBuffer, 4), 0);
+ }
+
+ public static void SerializeBool(bool serializable, PacketBuffer packetBuffer) {
+ packetBuffer.Write((byte) (serializable ? 1 : 0));
+ }
+
+ public static bool DeserializeBool(PacketBuffer packetBuffer) {
+ return packetBuffer.Read() == 1;
+ }
+
+ public static void SerializeString(string serializable, PacketBuffer packetBuffer) {
+ byte[] Bytes = Encoding.Unicode.GetBytes(serializable);
+ packetBuffer.Write((byte) Bytes.Length);
+ foreach (byte B in Bytes) {
+ packetBuffer.Write(B);
+ }
+ }
+
+ public static string DeserializeString(PacketBuffer packetBuffer) {
+ int length = packetBuffer.Read();
+ List Bytes = new List();
+ for (int i = 0; i < length; i++) {
+ Bytes.Add(packetBuffer.Read());
+ }
+ return Encoding.Unicode.GetString(Bytes.ToArray());
+ }
+
+ }
+}