Example #1
0
        private static void HandleToClient(string source, MessageReader packet)
        {
            var messageType = (MessageType)packet.Tag;

            Console.ForegroundColor = ConsoleColor.Cyan;
            //Console.WriteLine($"{source,-15} Client received: {packet.Tag,-2} {messageType}");

            try
            {
                var reader = packet.GetHazelReader();
                var body   = reader.PeekToEnd();
                if (SaveMessages)
                {
                    File.WriteAllBytes(Path.Combine(MessageFolder, $"recv_{packet.Tag}_{allId++}.bin"), body);
                }

                switch (messageType)
                {
                case MessageType.ReselectServer:
                    var reselect = ReselectServer.Deserialize(reader);
                    DumpToConsole(reselect);
                    break;

                case MessageType.Redirect:
                    var redirect = Redirect.Deserialize(reader);
                    DumpToConsole(redirect);
                    break;

                case MessageType.HostGame:
                    var host = HostGameResponse.Deserialize(reader);
                    DumpToConsole(host);
                    break;

                case MessageType.JoinGame:
                    var join = JoinGameResponse.Deserialize(reader);
                    DumpToConsole(join);
                    break;

                case MessageType.GameData:
                    var gamedata = GameData.Deserialize(reader);
                    foreach (var item in gamedata)
                    {
                        HandleGameData(item, false);
                    }

                    //Directory.CreateDirectory("gamedata");
                    //File.WriteAllBytes(Path.Combine("gamedata", $"recv_data_{gamedataId++}.bin"), body);
                    break;

                case MessageType.GameDataTo:
                    var gamedatato = GameDataTo.Deserialize(reader);
                    foreach (var item in gamedatato)
                    {
                        HandleGameDataTo(item, false);
                    }
                    break;

                case MessageType.JoinedGame:
                    var joined = JoinedGame.Deserialize(reader);
                    DumpToConsole(joined);
                    break;

                case MessageType.AlterGame:
                    var alter = AlterGameResponse.Deserialize(reader);
                    DumpToConsole(alter);
                    break;

                case MessageType.GetGameListV2:
                    var gamelist = GetGameListV2Response.Deserialize(reader);
                    DumpToConsole(gamelist);
                    break;

                case MessageType.RemovePlayer:
                    var removeplayer = RemovePlayerResponse.Deserialize(reader);
                    DumpToConsole(removeplayer);
                    break;

                case MessageType.StartGame:
                    var start = StartGame.Deserialize(reader);
                    DumpToConsole(start);
                    if (BreakOnGameStart)
                    {
                        Console.WriteLine("Press any key to continue...");
                        Console.ReadKey();
                    }
                    break;

                case MessageType.EndGame:
                    var end = EndGame.Deserialize(reader);
                    DumpToConsole(end);
                    if (BreakOnGameEnd)
                    {
                        Console.WriteLine("Press any key to continue...");
                        Console.ReadKey();
                    }

                    //Clear Entities to prevent collisions
                    EntityTracker.entities.Clear();
                    break;

                default:
                    Console.WriteLine($"Unhandled Message: {messageType} size: {body.Length}");
                    return;
                }

                if (reader.GetBytesLeft() > 0 && LogNotConsumed)
                {
                    Console.WriteLine($"[{messageType}]{reader.GetBytesLeft()} bytes not cunsumed");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error handling ToClient: " + ex.Message);
            }
        }
Example #2
0
// ParseNetMessage accepts input of raw bytes from a NetMessage. Parses and returns a Net message.
    public static INet Parse(ushort msgType, byte[] content)
    {
        INet    msg = null;
        MsgType mt  = (MsgType)msgType;

        switch (mt)
        {
        case MsgType.Multipart:
            msg = new Multipart();
            break;

        case MsgType.Heartbeat:
            msg = new Heartbeat();
            break;

        case MsgType.Connected:
            msg = new Connected();
            break;

        case MsgType.Disconnected:
            msg = new Disconnected();
            break;

        case MsgType.CreateAcct:
            msg = new CreateAcct();
            break;

        case MsgType.CreateAcctResp:
            msg = new CreateAcctResp();
            break;

        case MsgType.Login:
            msg = new Login();
            break;

        case MsgType.LoginResp:
            msg = new LoginResp();
            break;

        case MsgType.Character:
            msg = new Character();
            break;

        case MsgType.ListGames:
            msg = new ListGames();
            break;

        case MsgType.ListGamesResp:
            msg = new ListGamesResp();
            break;

        case MsgType.CreateGame:
            msg = new CreateGame();
            break;

        case MsgType.CreateGameResp:
            msg = new CreateGameResp();
            break;

        case MsgType.JoinGame:
            msg = new JoinGame();
            break;

        case MsgType.GameConnected:
            msg = new GameConnected();
            break;

        case MsgType.GameMasterFrame:
            msg = new GameMasterFrame();
            break;

        case MsgType.Entity:
            msg = new Entity();
            break;

        case MsgType.MovePlayer:
            msg = new MovePlayer();
            break;

        case MsgType.UseAbility:
            msg = new UseAbility();
            break;

        case MsgType.AbilityResult:
            msg = new AbilityResult();
            break;

        case MsgType.EndGame:
            msg = new EndGame();
            break;
        }
        MemoryStream ms = new MemoryStream(content);

        msg.Deserialize(new BinaryReader(ms));
        return(msg);
    }