public async Task ProcessServerPackages()
        {
            var port = this.GetPortNumber(PacketServerPort);

            var serializer = new BinarySerializer(BinarySerializationMethod.UnsafeSerialization);

            using (var packetServer = new PacketServer(IPAddress.Any, port))
            {
                packetServer.Start();

                using (var client = new TcpClient("localhost", port))
                    using (var stream = client.GetStream())
                    {
                        var packetSequence = PacketFixture.GetPacketSequence(PacketSequenceLength);

                        foreach (var packet in packetSequence)
                        {
                            await packetServer.SendPacket(packet).WithTimeOut(Timeout);

                            var answer = await serializer.Deserialize <Packet>(stream).WithTimeOut(Timeout);

                            Assert.AreEqual <PacketEx>(packet, answer);
                        }
                    }
            }
        }
        public async Task ProcessServerPackagesSequence()
        {
            var port = this.GetPortNumber(PacketServerPort);

            var serializer = new BinarySerializer(BinarySerializationMethod.UnsafeSerialization);
            var queue      = new WaitableQueue <Packet>();

            using (var packetServer = new PacketServer(IPAddress.Any, port))
            {
                packetServer.OnNewPacketReceived += (sender, value) => queue.Enqueue(value);
                packetServer.Start();

                using (var client = new TcpClient("localhost", port))
                    using (var stream = client.GetStream())
                    {
                        var packetSequence = PacketFixture.GetPacketSequence(PacketSequenceLength);

                        foreach (var packet in packetSequence)
                        {
                            await serializer.Serialize(packet, stream).WithTimeOut(Timeout);
                        }

                        foreach (var packet in packetSequence)
                        {
                            var answer = await queue.Dequeue(Timeout);

                            Assert.AreEqual <PacketEx>(packet, answer);
                        }
                    }
            }
        }
        public async Task ProcessDuplexExchange()
        {
            var port = this.GetPortNumber(PacketServerPort);

            var serializer = new BinarySerializer(BinarySerializationMethod.UnsafeSerialization);
            var queue      = new WaitableQueue <Packet>();

            using (var packetServer = new PacketServer(IPAddress.Any, port))
            {
                packetServer.OnNewPacketReceived += (sender, value) => queue.Enqueue(value);
                packetServer.Start();

                using (var client = new TcpClient("localhost", port))
                    using (var stream = client.GetStream())
                    {
                        var serverSequence = PacketFixture.GetPacketSequence(PacketSequenceLength);
                        var clientSequence = PacketFixture.GetPacketSequence(PacketSequenceLength);

                        foreach (var(serverPacket, clientPacket) in serverSequence.JoinByIndex(clientSequence))
                        {
                            await Task.WhenAll(packetServer.SendPacket(serverPacket),
                                               serializer.Serialize(clientPacket, stream));

                            var results = await Task.WhenAll(queue.Dequeue(Timeout), serializer.Deserialize <Packet>(stream).WithTimeOut(Timeout));

                            Assert.AreEqual <PacketEx>(clientPacket, results[0]);
                            Assert.AreEqual <PacketEx>(serverPacket, results[1]);
                        }
                    }
            }
        }
Exemplo n.º 4
0
        private static void LogPacket(PacketServer packet)
        {
            try
            {
                if (!Directory.Exists("logs"))
                {
                    Directory.CreateDirectory("logs");
                }

                var filename = $"logs/packet_log-{DateTime.Now:yyyy-M-d}.txt";
                if (!File.Exists(filename))
                {
                    File.Create(filename).Close();
                }

                using (StreamWriter w = File.AppendText(filename))
                {
                    w.WriteLine($"[{DateTime.Now:yyyy-M-d H:mm:ss}] = Opcode: {(RealmCMD)packet.Opcode} [Length: {packet.Packet.Length}]");
                    w.Write(ByteArrayToHex(packet.Packet));
                    w.WriteLine();
                    w.WriteLine();
                }
            }
            catch (Exception e)
            {
                var trace = new StackTrace(e, true);
                Log.Print(LogType.Error, $"{e.Message}: {e.Source}\n{trace.GetFrame(trace.FrameCount - 1).GetFileName()}:{trace.GetFrame(trace.FrameCount - 1).GetFileLineNumber()}");
            }
        }
Exemplo n.º 5
0
        internal RealmServerSession(int connectionId, Socket connectionSocket)
        {
            ConnectionId     = connectionId;
            ConnectionSocket = connectionSocket;
            DataBuffer       = new byte[BufferSize];

            try
            {
                Log.Print(LogType.RealmServer, $"Incoming connection from [{ConnectionRemoteIp}]");
                ConnectionSocket.BeginReceive(DataBuffer, 0, DataBuffer.Length, SocketFlags.None, DataArrival, null);
            }
            catch (SocketException e)
            {
                var trace = new StackTrace(e, true);
                Log.Print(LogType.Error, $"{e.Message}: {e.Source}\n{trace.GetFrame(trace.FrameCount - 1).GetFileName()}:{trace.GetFrame(trace.FrameCount - 1).GetFileLineNumber()}");
                Disconnect();
            }

            Thread.Sleep(500);

            // Connection Packet
            using (PacketServer packet = new PacketServer(RealmCMD.SMSG_AUTH_CHALLENGE))
            {
                packet.WriteBytes(new byte[] { 0x33, 0x18, 0x34, 0xC8 });
                SendPacket(packet);
            }
        }
Exemplo n.º 6
0
        public static void LogPacket(LogPacket type, PacketServer packet)
        {
            try
            {
                var logFilePath = $"logs/{type}_log-{DateTime.Now:yyyy-M-d}.txt";
                var logFileInfo = new FileInfo(logFilePath);
                var logDirInfo  = new DirectoryInfo(logFileInfo.DirectoryName ?? throw new InvalidOperationException());

                if (!logDirInfo.Exists)
                {
                    logDirInfo.Create();
                }

                using (var fileStream = new FileStream(logFilePath, FileMode.Append))
                {
                    using (var log = new StreamWriter(fileStream))
                    {
                        log.WriteLine(
                            $"[{DateTime.Now:yyyy-M-d H:mm:ss}] OPCode: {(RealmEnums) packet.Opcode} " + // (RealmCMD)
                            $"[Length: {packet.Packet.Length}]");
                        log.Write(Utils.ByteArrayToHex(packet.Packet));
                        log.WriteLine();
                        log.WriteLine();
                    }
                }
            }
            catch (Exception e)
            {
                var trace = new StackTrace(e, true);
                Print(LogType.Error,
                      $"{e.Message}: {e.Source}\n{trace.GetFrame(trace.FrameCount - 1).GetFileName()}:{trace.GetFrame(trace.FrameCount - 1).GetFileLineNumber()}");
            }
        }
 public override void LoadData()
 {
     MyAPIGateway.Entities.OnEntityAdd += EntityAdded;
     Instance = this;
     Net.Register();
     CachedPacketServer = new PacketServer();
     CachedPacketClient = new PacketClient();
 }
Exemplo n.º 8
0
        private static void MirrorRateTesting()
        {
            var server = new PacketServer(26657);

            server.StartListening();

            var client = new PacketClient("127.0.0.1", 26657);
            var sw     = Stopwatch.StartNew();
            var pc     = 0;

            server.PacketReceived += (s, e) => mirror(e);
            client.PacketReceived += (s, e) => mirror(e);

            if (client.Connect())
            {
                client.Communicator.Send(new PingPacket());
            }
            else
            {
                throw new Exception("How?");
            }

            while (true)
            {
                Thread.Sleep(-1);
            }

            void mirror(PacketReceivedEventArgs e)
            {
                if (e.Packet is PingPacket pingPacket)
                {
                    e.Connection.Communicator.Send(new PongPacket()
                    {
                        Value = pingPacket.Value + 1
                    });
                }
                else if (e.Packet is PongPacket pongPacket)
                {
                    e.Connection.Communicator.Send(new PingPacket()
                    {
                        Value = pongPacket.Value + 1
                    });
                }

                if (e.Connection is PacketClient)
                {
                    pc++;

                    if (sw.ElapsedMilliseconds > 1000)
                    {
                        Console.WriteLine($"Mirrored {pc} packets.");
                        pc = 0;
                        sw.Restart();
                    }
                }
            }
        }
Exemplo n.º 9
0
        internal static void OnAttackSwing(RealmServerSession session, PacketReader handler)
        {
            ulong guid = handler.ReadUInt64();

            PacketServer packet = new PacketServer(RealmCMD.SMSG_ATTACKSTART);

            packet.Write(session.Entity.ObjectGuid.RawGuid);
            packet.Write(session.Entity.ObjectGuid.RawGuid);
            session.SendPacket(packet);
        }
Exemplo n.º 10
0
        public void Start()
        {
            var build = $"League Sandbox Build {ServerContext.BuildDateString}";

            Console.Title = build;
            _logger.Debug(build);
            _logger.Debug($"Yorick {_serverVersion}");
            _logger.Info($"Game started on port: {_serverPort}");
            var _packetServer = new PacketServer();

            _packetServer.InitServer(_serverPort, _blowfishKey, _game, _game.RequestHandler, _game.ResponseHandler);
            _game.Initialize(_config, _packetServer);
        }
Exemplo n.º 11
0
        public void Initialize(Config config, PacketServer server)
        {
            _logger.Info("Loading Config.");
            Config = config;

            _gameScriptTimers = new List <GameScriptTimer>();

            ChatCommandManager.LoadCommands();

            ObjectManager = new ObjectManager(this);
            Map           = new Map(this);
            ApiFunctionManager.SetGame(this);
            ApiEventManager.SetGame(this);
            IsRunning = false;

            _logger.Info("Loading C# Scripts");

            LoadScripts();

            Map.Init();

            _logger.Info("Add players");
            foreach (var p in Config.Players)
            {
                ((PlayerManager)PlayerManager).AddPlayer(p);
            }

            _pauseTimer = new Timer
            {
                AutoReset = true,
                Enabled   = false,
                Interval  = 1000
            };
            _pauseTimer.Elapsed += (sender, args) => PauseTimeLeft--;
            PauseTimeLeft        = 30 * 60; // 30 minutes

            // TODO: GameApp should send the Response/Request handlers
            _packetServer = server;
            // TODO: switch the notifier with ResponseHandler
            PacketNotifier = new PacketNotifier(_packetServer.PacketHandlerManager, Map.NavGrid);
            InitializePacketHandlers();

            _logger.Info("Game is ready.");
        }
Exemplo n.º 12
0
        public void Initialize(ushort port, string blowfishKey, Config config)
        {
            _logger.Info("Loading Config.");
            Config = config;

            _gameScriptTimers = new List <GameScriptTimer>();

            ChatCommandManager.LoadCommands();

            ObjectManager = new ObjectManager(this);
            Map           = new Map(this);
            ApiFunctionManager.SetGame(this);
            ApiEventManager.SetGame(this);
            IsRunning = false;

            _logger.Info("Loading C# Scripts");

            LoadScripts();

            Map.Init();

            _logger.Info("Add players");
            foreach (var p in Config.Players)
            {
                ((PlayerManager)PlayerManager).AddPlayer(p);
            }

            _pauseTimer = new Timer
            {
                AutoReset = true,
                Enabled   = false,
                Interval  = 1000
            };
            _pauseTimer.Elapsed += (sender, args) => PauseTimeLeft--;
            PauseTimeLeft        = 30 * 60; // 30 minutes

            _packetServer = new PacketServer();
            _packetServer.InitServer(port, blowfishKey, this);
            PacketNotifier = new PacketNotifier(_packetServer.PacketHandlerManager, Map.NavGrid);
            // TODO: make lib to only get API types and not byte[], start from removing this line
            PacketReader = new PacketReader();

            _logger.Info("Game is ready.");
        }
Exemplo n.º 13
0
        public async Task ProcessDuplexExchangeConcurrent()
        {
            var port = this.GetPortNumber(PacketServerPort);

            var serializer = new BinarySerializer(BinarySerializationMethod.UnsafeSerialization);
            var queue      = new WaitableQueue <Packet>();

            using (var packetServer = new PacketServer(IPAddress.Any, port))
            {
                packetServer.OnNewPacketReceived += (sender, value) => queue.Enqueue(value);
                packetServer.Start();

                using (var client = new TcpClient("localhost", port))
                    using (var stream = client.GetStream())
                    {
                        var  serverSequence = PacketFixture.GetPacketSequence(PacketSequenceLength);
                        Task serverTask     = null;
                        foreach (var packet in serverSequence)
                        {
                            var task = packetServer.SendPacket(packet);
                            serverTask = serverTask?.ContinueWith(t => task).Unwrap() ?? task;
                        }

                        var clientSequence = PacketFixture.GetPacketSequence(PacketSequenceLength);
                        var clientTask     = Task.CompletedTask;
                        foreach (var packet in clientSequence)
                        {
                            // ReSharper disable once AccessToDisposedClosure
                            clientTask = clientTask.ContinueWith(t => serializer.Serialize(packet, stream)).Unwrap();
                        }

                        await Task.WhenAll(serverTask, clientTask).WithTimeOut(Timeout);

                        foreach (var(serverPacket, clientPacket) in serverSequence.JoinByIndex(clientSequence))
                        {
                            var results = await Task.WhenAll(queue.Dequeue(Timeout), serializer.Deserialize <Packet>(stream).WithTimeOut(Timeout));

                            Assert.AreEqual <PacketEx>(clientPacket, results[0]);
                            Assert.AreEqual <PacketEx>(serverPacket, results[1]);
                        }
                    }
            }
        }
Exemplo n.º 14
0
        private static void Main()
        {
            try
            {
                LoadConfiguration();
            }
            catch (FormatException e)
            {
                Logger.Error("Unable to parse IPAddress: {0}", e.Message);
                return;
            }
            catch (Exception e)
            {
                Logger.Error("Parameters loading failed: {0}", e.Message);
                return;
            }

            try
            {
                var exitEvent = new ManualResetEvent(false);

                var packetServer = new PacketServer(PacketServerIpAddress, PacketServerPort);
                var proxyServer  = new ProxyServer(ExternalServerIpAddress, ExternalServerPort)
                {
                    PacketReceiver = packetServer
                };

                packetServer.Start();
                proxyServer.Start();

                Logger.Info($"Started packet server at {PacketServerIpAddress}:{PacketServerPort}");
                Logger.Info($"Started proxy server at {ExternalServerIpAddress}:{ExternalServerPort}");
                Logger.Info("Waiting for agent...");

                exitEvent.WaitOne();
            }
            catch (Exception e)
            {
                Logger.Fatal(e);
            }
        }
Exemplo n.º 15
0
        internal static void OnAttackStop(RealmServerSession session, PacketReader handler)
        {
            PacketServer packet = new PacketServer(RealmCMD.SMSG_ATTACKSTOP);

            packet.Write(session.Entity.ObjectGuid.RawGuid);
            packet.Write(session.Entity.ObjectGuid.RawGuid);
            packet.Write((int)0);
            packet.Write((byte)0);
            session.SendPacket(packet);

            //SendAttackStop(client.Character.GUID, client.Character.TargetGUID, client)
            //client.Character.attackState.AttackStop()

            /*
             * 'AttackerGUID stopped attacking victimGUID
             * Dim SMSG_ATTACKSTOP As New PacketClass(OPCODES.SMSG_ATTACKSTOP)
             * SMSG_ATTACKSTOP.AddPackGUID(attackerGUID)
             * SMSG_ATTACKSTOP.AddPackGUID(victimGUID)
             * SMSG_ATTACKSTOP.AddInt32(0)
             * SMSG_ATTACKSTOP.AddInt8(0)
             * client.Character.SendToNearPlayers(SMSG_ATTACKSTOP)
             */
        }
 public PacketServerViewModel(PacketServer server)
     : base()
 {
     this.Server = server;
 }
Exemplo n.º 17
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="packet"></param>
 internal void TransmitToAll(PacketServer packet)
 {
     Sessions.FindAll(s => s.Character != null).ForEach(s => s.SendPacket(packet));
 }
Exemplo n.º 18
0
 internal void SendPacket(PacketServer packet)
 {
     LogPacket(packet);
     SendPacket(packet.Opcode, packet.Packet);
 }
Exemplo n.º 19
0
        public static void Main()
        {
            var ports = SerialPort.GetPortNames();

            for (int i = 0; i < ports.Length; i++)
            {
                Console.WriteLine("{0}:{1}", i, ports[i]);
            }

            var strnum = Console.ReadKey().KeyChar.ToString();
            int num = -1;
            Console.WriteLine("\r\nOpening...");
            if (int.TryParse(strnum, out num))
            {
                var sport = new SerialPort(ports[num], 9600, Parity.None, 8, StopBits.One);
                sport.Encoding = Encoding.UTF8;
                sport.NewLine = "\n";
                sport.RtsEnable = true;
                sport.DtrEnable = true;
                sport.DiscardNull = false;
                sport.ReadTimeout = 10000;

                int counter = 0;
                while (true)
                {
                    try
                    {
                        if (sport.IsOpen)
                            sport.Close();

                        sport.Open();
                        break;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(counter);
                        System.Threading.Thread.Sleep(1000);
                        if (++counter > 10)
                            throw;
                    }
                }
                Console.WriteLine("opened successfully");

                var server = new PacketServer(sport.BaseStream);
                var dispatcher = new PacketDispatcher();
                var cens = dispatcher.GetTrainCensor(new DeviceID() { ParentPart = 1, ModulePart = 1 });
                server.AddAction(dispatcher);
                cens.PacketReceived += new PacketReceivedDelegate((dev, args) => Console.WriteLine(dev.ToString()));
                server.LoopStart();

                while (true)
                {
                    System.Threading.Thread.Sleep(100);
                }

                //bool sta = true, stab = false;
                //var watch = new System.Diagnostics.Stopwatch();
                //while (sport.IsOpen)
                //{
                //    //char[] buf = new char[64];
                //    //sport.Read(buf, 0, 64);

                //    //var output = new string(buf, 16, 48);
                //    //Console.WriteLine(output);
                //    string context = "";// sport.ReadLine();
                //    byte[] buffer = new byte[256];
                //    sport.Read(buffer, 0, 8);

                //    int startIndex = 0;
                //    int tmp = 0;

                //    while (!int.TryParse(context[startIndex].ToString(), out tmp))
                //        startIndex++;

                //    var val = float.Parse(context.Substring(startIndex, context.Length - startIndex).Trim().Split(',')[0]);
                //    if (!stab && val <= 2.0)
                //    {
                //        Console.WriteLine("{0} detecting", DateTime.Now.ToString());

                //        stab = true;
                //        if (sta) // first
                //        {
                //            watch.Restart();
                //            sta = false;
                //        }
                //        else
                //        {
                //            watch.Stop();
                //            if (watch.Elapsed.TotalSeconds < 5.0)
                //            {
                //                Console.WriteLine("{0}sec. v={1}m/s", watch.Elapsed.TotalSeconds, 0.05 / watch.Elapsed.TotalSeconds);
                //                sta = true;
                //            }
                //            else
                //            {
                //                // modify meisuring position
                //                watch.Restart();
                //                sta = false ;
                //            }
                //        }
                //    }
                //    else if (stab && val > 2.0)
                //    {
                //        stab = false;
                //        Console.WriteLine("{0} detected", DateTime.Now.ToString());

                //    }

                //}
            }
        }
Exemplo n.º 20
0
 internal void SendPacket(PacketServer packet)
 {
     SendPacket((byte)packet.Opcode, packet.Packet);
 }
Exemplo n.º 21
0
 public void SendData(PacketServer packet)
 {
     SendData(packet.Packet, packet.Opcode.ToString());
 }
Exemplo n.º 22
0
 public override void RegisterPacketServer(PacketServer server)
 {
     this._sweeperPacketServer = (SweeperPacketServer)server;
 }
Exemplo n.º 23
0
        private static void Update()
        {
            while (true)
            {
                foreach (PlayerEntity player in Players)
                {
                    #region Checa Players
                    foreach (PlayerEntity otherPlayer in Players)
                    {
                        // Ignore self
                        if (player == otherPlayer)
                        {
                            continue;
                        }

                        if (InRangeCheck(player, otherPlayer))
                        {
                            if (!player.KnownPlayers.Contains(otherPlayer))
                            {
                                SpawnPlayer(player, otherPlayer);
                            }
                        }
                        else
                        {
                            if (player.KnownPlayers.Contains(otherPlayer))
                            {
                                DespawnPlayer(player, otherPlayer);
                            }
                        }
                    }
                    #endregion

                    #region Checa Objetos para adicionar ao mapa
                    var objetos = MainForm.Database.GetGameObjects(player, MainForm.DistanciaFoda);
                    if (objetos.Any())
                    {
                        foreach (zoneObjeto objeto in objetos)
                        {
                            if (!player.KnownGameObjects.Contains(objeto))
                            {
                                SpawnObjeto(player, objeto);
                            }
                        }
                    }
                    #endregion

                    // NPC Spawns

                    // Update Packet
                    if (player.UpdateCount > 0)
                    {
                        PacketServer packet = UpdateObject.UpdateValues(player);
                        player.Session.SendPacket(packet);
                        WorldManager.SessionsWhoKnow(player).ForEach(s => s.SendPacket(packet));
                    }
                }

                // Fix????
                Thread.Sleep(100);
            }
            // ReSharper disable once FunctionNeverReturns
        }