Интерпретация NetIncomingMessage с использованием Lidgren.Network - PullRequest
0 голосов
/ 07 марта 2019

Я до сих пор не нашел ответа на этот вопрос, и я не уверен, что я просто упустил часть головоломки или ужасно неправильно понял часть библиотеки Lidgren Network.У меня есть небольшой сервер / клиентский проект, который мне удалось успешно подключить, но когда это происходит, консоль просто выводит «NetIncomingMessage #XXX», а не любые данные, которые я помещаю в сообщение (например, что-то вроде строки «Привет").Как я узнаю, что на самом деле находится внутри данных, которые я получаю?Есть ли способ интерпретировать сообщение, чтобы принимающая сторона могла сказать: «О, это координаты для игрока Y», а затем прочитать их?Я подумал, что, может быть, вам нужно было создать собственный NetIncomingMessageType или что-то в этом роде, но я копал как сумасшедший, и у меня было немало времени, чтобы попытаться это выяснить.Как мне отличить сообщение чата от координат игрока?Есть ли способ создания пользовательских типов сообщений, чтобы получающая сторона просто знала, какой тип пакета она получает, поэтому я не пытаюсь всегда читать строки, когда пакет представляет собой просто необработанные числа, или наоборот?

Для справки вот код, с которым я работаю:

namespace NetworkSendReceiveTest
{
    class Program
    {
        static bool IsInitialized = false;
        static bool IsNetworkHost;
        static bool IsLooping = true;
        static string HostIP;

        static NetServer Server;
        static NetPeerConfiguration NetConfig;
        static NetClient Client;



        static void Main(string[] args)
        {
            AskIfHosting();

            while(IsLooping == true)
            {
                if(IsNetworkHost == true)
                {
                    ServerUpdate();
                }
                else
                {
                    HostUpdate();
                }
            }
        }

        static void AskIfHosting()
        {
            Console.WriteLine("Are you Hosting? Y/N : ");
            char hostAnswer = Convert.ToChar(Console.ReadLine());

            switch (hostAnswer)
            {
                case 'Y':
                    {
                        // Is the Server
                        IsNetworkHost = true;

                        NetConfig = new NetPeerConfiguration("NetworkTest") { Port = 15051 };
                        Server = new NetServer(NetConfig);
                        Server.Start();

                        //NetConfig.EnableMessageType(NetIncomingMessageType.ConnectionApproval);

                        break;
                    }
                case 'N':
                    {
                        // Not the Server
                        IsNetworkHost = false;

                        NetConfig = new NetPeerConfiguration("NetworkTest") { Port = 15051 };
                        Client = new NetClient(NetConfig);
                        Client.Start();

                        Console.WriteLine("\nPlease Enter Host IP: ");
                        HostIP = Console.ReadLine();

                        Client.Connect(host: HostIP, port: 15051);

                        //NetOutgoingMessage approval = Client.CreateMessage();
                        //approval.Write("secret15051");
                        //Server.Connect(HostIP, 15051, approval);
                        break;
                    }
                default:
                    {
                        IsNetworkHost = false;
                        break;
                    }
            }

            IsInitialized = true;
        }
        static void ServerUpdate()
        {
            NetIncomingMessage msg;
            while ((msg = Server.ReadMessage()) != null)
            {
                switch (msg.MessageType)
                {
                    case NetIncomingMessageType.VerboseDebugMessage:
                    case NetIncomingMessageType.DebugMessage:
                    case NetIncomingMessageType.WarningMessage:
                    case NetIncomingMessageType.ErrorMessage:
                        Console.WriteLine(msg.ReadString());
                        break;
                    case NetIncomingMessageType.ConnectionApproval:
                        {
                            string s = msg.ReadString();
                            if (s == "secret15051")
                            {
                                msg.SenderConnection.Approve();
                                Console.WriteLine("\nNew Connection Incoming: Approved");
                            }
                            else
                            {
                                msg.SenderConnection.Deny();
                                Console.WriteLine("\nNew Connection Incoming: Denied");
                            }

                            break;
                        }
                    case NetIncomingMessageType.Data:
                        {
                            string message = msg.ReadInt32().ToString();
                            Console.WriteLine(msg);
                            break;
                        }
                    default:
                        Console.WriteLine("Unhandled type: " + msg.MessageType);
                        break;
                }

                Server.Recycle(msg);
            }
        }
        static void HostUpdate()
        {
            var message = Client.CreateMessage();
            message.Write(42);

            Client.SendMessage(message, NetDeliveryMethod.ReliableOrdered);
        }
    }
}
...