87 lines
3.8 KiB
C#
87 lines
3.8 KiB
C#
using System.Net;
|
|
using System.Net.Sockets;
|
|
|
|
namespace Passer.Control.Core {
|
|
|
|
public class SiteServer : Participant {
|
|
|
|
public SiteServer(int port) {
|
|
this.ipAddress = "0.0.0.0";
|
|
this.port = port;
|
|
this.endPoint = new IPEndPoint(IPAddress.Parse(ipAddress), 0); // for sending, but should not be used really...
|
|
this.udpClient = new UdpClient(); // for receiving
|
|
this.udpClient.Client.Bind(new IPEndPoint(IPAddress.Any, port));
|
|
this.udpClient.BeginReceive(new AsyncCallback(result => ReceiveUDP(result)), null);
|
|
|
|
}
|
|
|
|
protected override void ProcessClient(ClientMsg msg) {
|
|
if (msg.networkId == 0) {
|
|
this.Send(new NetworkIdMsg(this.networkId));
|
|
Console.WriteLine($"############################ New Client -> {this.networkId}");
|
|
}
|
|
else
|
|
Console.WriteLine($"############################ New Client");
|
|
}
|
|
}
|
|
// public static class SiteServer {
|
|
|
|
// public static async Task ReceiveData(Stream dataStream, Participant client) {
|
|
// while (true) {
|
|
// byte packetSize = (byte)dataStream.ReadByte();
|
|
// if (packetSize != 0xFF)
|
|
// await ReceiveData(dataStream, client, packetSize);
|
|
// // else timeout
|
|
// }
|
|
// }
|
|
|
|
// public static async Task ReceiveData(Stream dataStream, Participant client, byte packetSize) {
|
|
// byte msgId = (byte)dataStream.ReadByte();
|
|
// if (msgId == 0xFF) {
|
|
// // Timeout
|
|
// return;
|
|
// }
|
|
|
|
// //UnityEngine.Debug.Log($"R {msgId} from {client.ipAddress}");
|
|
// bool result = false;
|
|
// switch (msgId) {
|
|
// case ClientMsg.Id: // 0xA0 / 160
|
|
// result = await ClientMsg.Receive(dataStream, client, packetSize);
|
|
// break;
|
|
// case NetworkIdMsg.Id: // 0xA1 / 161
|
|
// result = await NetworkIdMsg.Receive(dataStream, client, packetSize);
|
|
// break;
|
|
// case InvestigateMsg.Id: // 0x81
|
|
// result = await InvestigateMsg.Receive(dataStream, client, packetSize);
|
|
// break;
|
|
// case ThingMsg.id: // 0x80 / 128
|
|
// result = await ThingMsg.Receive(dataStream, client, packetSize);
|
|
// break;
|
|
// case NameMsg.Id: // 0x91 / 145
|
|
// result = await NameMsg.Receive(dataStream, client, packetSize);
|
|
// break;
|
|
// case ModelUrlMsg.Id: // 0x90 / 144
|
|
// result = await ModelUrlMsg.Receive(dataStream, client, packetSize);
|
|
// break;
|
|
// case PoseMsg.Id: // 0x10 / 16
|
|
// result = await PoseMsg.Receive(dataStream, client, packetSize);
|
|
// break;
|
|
// case CustomMsg.Id: // 0xB1 / 177
|
|
// result = await CustomMsg.Receive(dataStream, client, packetSize);
|
|
// break;
|
|
// case TextMsg.Id: // 0xB0 / 176
|
|
// result = await TextMsg.Receive(dataStream, client, packetSize);
|
|
// break;
|
|
// case DestroyMsg.Id: // 0x20 / 32
|
|
// result = await DestroyMsg.Receive(dataStream, client, packetSize);
|
|
// break;
|
|
// default:
|
|
// break;
|
|
// }
|
|
// if (result == false) {
|
|
// packetSize = msgId; // skip 1 byte, msgId is possibly a packet size byte
|
|
// await ReceiveData(dataStream, client, packetSize);
|
|
// }
|
|
// }
|
|
// }
|
|
} |