GodotTicTacToe/scripts/Peer.cs

50 lines
1.6 KiB
C#

using Godot;
using System.Threading;
using Thread = System.Threading.Thread;
public abstract class Peer : Object {
private static PacketPeerUDP PacketPeer;
private static Peer Singleton;
private int LastConnectionSended = -1;
private Thread ListenerThread;
public Peer(PacketPeerUDP packetPeer) {
PacketPeer = packetPeer;
}
public abstract void Initialize(string address, int port);
public abstract void Update(float delta);
public abstract void ReceivePacket(byte[] buffer, string address, int port);
public void SendBuffer(byte[] buffer, Connection to) {
int temp1 = PacketPeer.SetDestAddress(to.Address, to.Port);
int temp2 = PacketPeer.PutPacket(buffer);
GD.print("Putting stuff to " + to.Address + ":" + to.Port);
}
public bool StartListening(int port, string address = "*") {
if (PacketPeer.IsListening() || ListenerThread != null) {
GD.printerr("The Peer is already listening or the thread is active!");
return false;
}
Singleton = this;
PacketPeer.Listen(port, address);
ThreadStart ChildRef = new ThreadStart(ListenerThreadMethod);
ListenerThread = new Thread(ChildRef);
ListenerThread.Start();
return true;
}
public static void ListenerThreadMethod() {
GD.print("Started Listener Thread.");
while (true) {
PacketPeer.Wait();
byte[] Buffer = PacketPeer.GetPacket();
string Address = PacketPeer.GetPacketIp();
int Port = PacketPeer.GetPacketPort();
Singleton.ReceivePacket(Buffer, Address, Port);
}
}
}