简体   繁体   English

将枚举转换为字节,然后将其发送给lidgren

[英]Casting enums to bytes and sending them lidgren

I have this code for receiving messages: 我有以下代码用于接收消息:

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;
    }
}

and this code for sending them: 以及发送这些代码的代码:

internal void sendmsg(string v)
{
    NetOutgoingMessage outmsg = tclient.CreateMessage(v);
    outmsg.Write((byte)DataType.DATATYPEMSG);
    tclient.SendMessage(outmsg, NetDeliveryMethod.ReliableUnordered);
}

and if the message ever reaches the server it only calls the default and disconnects the user. 如果消息到达服务器,则仅调用默认值,并断开与用户的连接。

When you create the message you write the message text before DataType, but when you receive the message you expect DataType to appear before the text. 创建消息时,您将消息文本写在DataType之前,但是当您收到消息时,您希望DataType出现在文本之前。

You can fix it by writing DataType before the text, like this: 您可以通过在文本之前编写DataType来解决此问题,如下所示:

internal void sendmsg(string v)
{
    NetOutgoingMessage outmsg = tclient.CreateMessage();
    outmsg.Write((byte)DataType.DATATYPEMSG);
    outmsg.Write(v);
    tclient.SendMessage(outmsg, NetDeliveryMethod.ReliableUnordered);
}

I changed 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(); switch (data) { case DataType.DATATYPEMSG: string s = msg.ReadString(); NetOutgoingMessage outmsg = server.CreateMessage(); DataType data = (DataType)msg.ReadByte(); switch (data) { case DataType.DATATYPEMSG: string s = msg.ReadString(); to: NetOutgoingMessage outmsg = server.CreateMessage(); DataType data = (DataType)msg.ReadByte(); string s = msg.ReadString(); 到: NetOutgoingMessage outmsg = server.CreateMessage(); DataType data = (DataType)msg.ReadByte(); string s = msg.ReadString(); NetOutgoingMessage outmsg = server.CreateMessage(); DataType data = (DataType)msg.ReadByte(); string s = msg.ReadString();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM