65 lines
2.6 KiB
C#
65 lines
2.6 KiB
C#
using System.IO;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Passer.Control {
|
|
|
|
public static class SiteServer {
|
|
|
|
public static async Task ReceiveData(Stream dataStream, Client 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, Client client, byte packetSize) {
|
|
byte msgId = (byte)dataStream.ReadByte();
|
|
if (msgId == 0xFF) {
|
|
// Timeout
|
|
return;
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
} |