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

时间:2018-08-26 15:21:52

标签: c# lidgren

我有以下用于接收消息的代码:

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 个答案:

答案 0 :(得分:0)

创建消息时,您将消息文本写在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);
}

答案 1 :(得分:0)

我改变了 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();