Exemple #1
0
        public async Task Process(TUser user, IPacketReader packet)
        {
            var operation = packet.ReadShort();

            if (!_handlers.ContainsKey(operation))
            {
                _logger.LogWarning($"Unhandled {typeof(TStage).Name} packet operation 0x{operation:X} ({Enum.GetName((PacketRecvOperations)operation)})");
                return;
            }

            var handler = _handlers[operation];

            try
            {
                if (await handler.Check(user))
                {
                    await handler.Handle(user, packet);

                    if (ServerConstants.IsIgnoredLoggingPacket(operation) && !_logger.IsEnabled(LogLevel.Trace))
                    {
                        return;
                    }

                    _logger.LogDebug($"Handled {typeof(TStage).Name} packet operation 0x{operation:X} ({Enum.GetName((PacketRecvOperations)operation)}) with {packet.Available} available bytes");
                }
            }
            catch (Exception e)
            {
                await user.OnException(e);

                _logger.LogError(e, $"Caught exception when handling {typeof(TStage).Name} packet operation 0x{operation:X} ({Enum.GetName((PacketRecvOperations)operation)})");
            }
        }
Exemple #2
0
        static void Main(string[] args)
        {
            Console.ForegroundColor = ConsoleColor.White;
            Console.Title           = "Leatty " + ServerConstants.Version;

            ServerConstants.LoadFromFile();

            InitializeDatabase();
            LoadDataBuffers();
            CustomNpcs = DataProvider.LoadCustomNpcs();
            StartCashShop();
            StartLogin();
            StartChannels();
            PingTimer.Elapsed += (sender, e) => PingClients();


            StartDataApi();

            GC.Collect();
            string line = string.Empty;

            while (!(line = Console.ReadLine().ToLower()).Contains("stop") && !line.Contains("exit"))
            {
                string[] split = line.Split(' ');
                if (split.Length > 0)
                {
                    switch (split[0])
                    {
                    case "login":
                        if (ServerConstants.LocalHost && Program.Clients.Any())
                        {
                            MapleClient  c   = Program.Clients.First().Value;
                            MapleAccount acc = MapleAccount.GetAccountFromDatabase("Nuclear");
                            c.SendPacket(LoginAccountHandler.LoginAccountSuccess(acc));
                        }
                        break;

                    case "mapleshark":
                    case "maplesharkconfig":
                        MapleSharkConfigCreator.GenerateConfigFile();
                        break;

                    case "dumpskills":
                        Functions.DumpSkillConstants();
                        break;

                    case "dumpitems":
                        Functions.DumpItems();
                        break;

                    case "send":
                        if (split.Length > 4)
                        {
                            MapleCharacter chr = GetCharacterByName(split[1]);
                            if (chr == null)
                            {
                                ServerConsole.Info("Player " + split[1] + "not found");
                            }
                            else
                            {
                                PacketWriter pw = new PacketWriter();
                                pw.WriteHexString(split.Fuse(2));
                                chr.Client.SendPacket(pw);
                            }
                        }
                        break;

                    case "notice":
                        if (split.Length > 1)
                        {
                            string message = "[Notice] " + split.Fuse(1);
                            BroadCastWorldPacket(MapleCharacter.ServerNotice(message, 6));
                        }
                        break;

                    default:
                        ServerConsole.Info("Unknown command: " + line);
                        break;
                    }
                }
            }
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("Shutting down...");
            Quit();
        }