Приведение перечислений к байтам и их отправка
У меня есть этот код для получения сообщений:
private void DataMessage(NetIncomingMessage msg)
{
NetOutgoingMessage outmsg = server.CreateMessage();
DataType data = (DataType)msg.ReadByte();
switch (data)
{
case DataType.DATATYPEMSG:
string s = msg.ReadString();
Console.WriteLine(s);
outmsg.Write(s);
outmsg.Write((byte)DataType.DATATYPEMSG);
server.SendToAll(outmsg,NetDeliveryMethod.ReliableUnordered);
break;
case DataType.DATATYPEOTHER:
outmsg.Write((byte)DataType.DATATYPEMSG);
outmsg.Write("please try this again later");
server.SendMessage(outmsg,msg.SenderConnection,NetDeliveryMethod.ReliableUnordered);
break;
case DataType.DATATYPEREQUEST:
break;
default: msg.SenderConnection.Disconnect("if you believe you where wrongly picked up for editing the code please contact the developer");
break;
}
}
и этот код для отправки их:
internal void sendmsg(string v)
{
NetOutgoingMessage outmsg = tclient.CreateMessage(v);
outmsg.Write((byte)DataType.DATATYPEMSG);
tclient.SendMessage(outmsg, NetDeliveryMethod.ReliableUnordered);
}
и если сообщение когда-либо достигает сервера, оно вызывает только значение по умолчанию и отключает пользователя.
2 ответа
Я изменился
NetOutgoingMessage outmsg = server.CreateMessage();
DataType data = (DataType)msg.ReadByte();
switch (data)
{
case DataType.DATATYPEMSG:
string s = msg.ReadString();
чтобы:
NetOutgoingMessage outmsg = server.CreateMessage();
DataType data = (DataType)msg.ReadByte();
string s = msg.ReadString();
При создании сообщения вы пишете текст сообщения перед DataType, но при получении сообщения вы ожидаете, что DataType появится перед текстом.
Вы можете исправить это, написав DataType перед текстом, например так:
internal void sendmsg(string v)
{
NetOutgoingMessage outmsg = tclient.CreateMessage();
outmsg.Write((byte)DataType.DATATYPEMSG);
outmsg.Write(v);
tclient.SendMessage(outmsg, NetDeliveryMethod.ReliableUnordered);
}