Beispiel #1
0
        public static PacketProcessResult HandleAuthSession(PacketProcessor p)
        {

            CMSG_AUTH_SESSION auth = new CMSG_AUTH_SESSION();
            UInt32 unk, unk2, unk3, unk4, unk5;
            UInt64 unk6;

            auth.Build = p.currentPacket.ReadUInt32();
            unk = p.currentPacket.ReadUInt32();
            auth.Account = p.currentPacket.ReadCString();
            unk2 = p.currentPacket.ReadUInt32();

            auth.Seed = p.currentPacket.ReadUInt32();
            unk3 = p.currentPacket.ReadUInt32();
            unk4 = p.currentPacket.ReadUInt32();
            unk5 = p.currentPacket.ReadUInt32();
            unk6 = p.currentPacket.ReadUInt64();
            auth.Digest = p.currentPacket.ReadBigInteger(20);

            var decompressedDataSize = p.currentPacket.ReadInt32();
            var compressedData = p.currentPacket.ReadBytes((int)(p.currentPacket.Length - p.currentPacket.Position)); //read remaining array
            auth.AddonData = Shared.ZLib.Decompress(compressedData);

            var realmprocessor = p as RealmPacketProcessor;

            //get the encryption keys first because errors are encrypted too
            p.sock.session.GetSessionKeyFromAuthAccount(auth.Account).Wait();
            realmprocessor.SetupCrypto(p.sock.session.GetSessionKey().Result);
            p.sock.session.HandleAuthSession(auth, realmprocessor.Seed);

            return PacketProcessResult.Processed;
        }
Beispiel #2
0
 public static PacketProcessResult HandleRealmList(PacketProcessor p)
 {
     p.dataNeeded = 5; if (p.currentPacket.Length < p.dataNeeded) return PacketProcessResult.RequiresData;
     if (p.sock != null && p.sock.session != null)
         p.sock.session.OnRealmList();
     return PacketProcessResult.Processed;
 }
Beispiel #3
0
        public static PacketProcessResult HandleRequestAccountData(PacketProcessor p)
        {
            var type = p.CurrentPacket.ReadUInt32();

            p.ClientConnection.CurrentSession.HandleRequestAccountData(type);

            return PacketProcessResult.Processed;
        }
Beispiel #4
0
 public static PacketProcessResult HandleRealmList(PacketProcessor p)
 {
     p.DataNeeded = 5;
     if (p.CurrentPacket.Length < p.DataNeeded) return PacketProcessResult.RequiresData;
     if (p.ClientConnection != null && p.ClientConnection.CurrentSession != null)
         p.ClientConnection.CurrentSession.OnRealmList();
     return PacketProcessResult.Processed;
 }
Beispiel #5
0
        public static PacketProcessResult HandleRequestAccountData(PacketProcessor p)
        {
            var type = p.currentPacket.ReadUInt32();

            p.sock.session.HandleRequestAccountData(type);

            return PacketProcessResult.Processed;
        }
Beispiel #6
0
        public static PacketProcessResult HandlePlayerLogin(PacketProcessor p)
        {
            CMSG_PLAYER_LOGIN pkt = new CMSG_PLAYER_LOGIN();
            pkt.Read(p.CurrentPacket);

            p.ClientConnection.CurrentSession.HandlePlayerLogin(pkt);

            return PacketProcessResult.Processed;
        }
Beispiel #7
0
        public static PacketProcessResult HandleCharCreate(PacketProcessor p)
        {
            CMSG_CHAR_CREATE create = new CMSG_CHAR_CREATE();
            create.Read(p.CurrentPacket);

            p.ClientConnection.CurrentSession.HandleCharCreate(create);

            return PacketProcessResult.Processed;
        }
Beispiel #8
0
        public static PacketProcessResult HandleLogoutRequest(PacketProcessor p)
        {
            var player = p.ClientConnection.CurrentPlayer;
            if (player == null)
                return PacketProcessResult.Processed;

            player.Logout(true).Wait();

            return PacketProcessResult.Processed;
        }
Beispiel #9
0
        public static PacketProcessResult HandleUpdateAccountData(PacketProcessor p)
        {
            var type = p.CurrentPacket.ReadUInt32();
            var time = p.CurrentPacket.ReadUInt32();
            var size = p.CurrentPacket.ReadUInt32();
            var data = p.CurrentPacket.ReadBytes((int) p.CurrentPacket.RemainingLength);

            p.ClientConnection.CurrentSession.HandleUpdateAccountData(type, time, size, data);

            return PacketProcessResult.Processed;
        }
Beispiel #10
0
        public static PacketProcessResult HandlePing(PacketProcessor p)
        {
            CMSG_PING pkt = new CMSG_PING();
            pkt.Read(p.CurrentPacket);

            PacketOut pout = new PacketOut(RealmOp.SMSG_PONG);
            pout.Write(pkt.ping);
            pout.Finalise();
            p.ClientConnection.Send(pout.strm.ToArray());

            return PacketProcessResult.Processed;
        }
Beispiel #11
0
        public static PacketProcessResult HandleLogoutRequest(PacketProcessor p)
        {
            var player = p.ClientConnection.CurrentPlayer;

            if (player == null)
            {
                return(PacketProcessResult.Processed);
            }

            player.Logout(true).Wait();

            return(PacketProcessResult.Processed);
        }
        /// <summary>
        /// Roundrestart server.
        /// </summary>
        /// <param name="port">Optional for redirecting everyone to other server..</param>
        public void RoundRestart(ushort port = 0)
        {
            NetDataWriter writer = new NetDataWriter();

            writer.Put(port);
            PacketProcessor.Send <ServerInteractPacket>(Peer,
                                                        new ServerInteractPacket()
            {
                AddonId = Assembly.GetCallingAssembly().GetAddonId(),
                Type    = (byte)ServerInteractionType.Hint,
                Data    = writer.Data,
            }, DeliveryMethod.ReliableOrdered);
        }
Beispiel #13
0
 public static PacketProcessResult HandleRealmList(PacketProcessor p)
 {
     p.DataNeeded = 5;
     if (p.CurrentPacket.Length < p.DataNeeded)
     {
         return(PacketProcessResult.RequiresData);
     }
     if (p.ClientConnection != null && p.ClientConnection.CurrentSession != null)
     {
         p.ClientConnection.CurrentSession.OnRealmList();
     }
     return(PacketProcessResult.Processed);
 }
        private void RawPacketReceived(byte[] data)
        {
            IDataPacket parsedPacket;

            using (var ms = new MemoryStream(data)
            {
                Position = 2
            })
            {
                parsedPacket = PacketProcessor.ParsePacket(ms);
                parsedPacket.DeserializeFrom(ms);
            }
            OnPacketReceived.Raise(this, new ClientPacketEventArgs(parsedPacket, this, data.Length));
        }
Beispiel #15
0
        public static PacketProcessResult HandlePing(PacketProcessor p)
        {
            CMSG_PING pkt = new CMSG_PING();

            pkt.Read(p.CurrentPacket);

            PacketOut pout = new PacketOut(RealmOp.SMSG_PONG);

            pout.Write(pkt.ping);
            pout.Finalise();
            p.ClientConnection.Send(pout.strm.ToArray());

            return(PacketProcessResult.Processed);
        }
Beispiel #16
0
 public override void OnRecvPacket(GSPacketIn pkg)
 {
     if (this.m_packetProcessor == null)
     {
         this.m_packetLib       = AbstractPacketLib.CreatePacketLibForVersion(1, this);
         this.m_packetProcessor = new PacketProcessor(this);
     }
     if (this.m_player != null)
     {
         pkg.ClientID = this.m_player.PlayerId;
         pkg.WriteHeader();
     }
     this.m_packetProcessor.HandlePacket(pkg);
 }
Beispiel #17
0
        public PacketHandler(TcpServer tcpServer, TimeKeeper timeKeeper)
        {
            this.defaultPacketProcessor = new DefaultServerPacketProcessor(tcpServer);

            var ProcessorArguments = new Dictionary <Type, object>
            {
                { typeof(TcpServer), tcpServer },
                { typeof(TimeKeeper), timeKeeper },
            };

            authenticatedPacketProcessorsByType = PacketProcessor.GetProcessors(ProcessorArguments, p => p.BaseType.IsGenericType && p.BaseType.GetGenericTypeDefinition() == typeof(AuthenticatedPacketProcessor <>));

            unauthenticatedPacketProcessorsByType = PacketProcessor.GetProcessors(ProcessorArguments, p => p.BaseType.IsGenericType && p.BaseType.GetGenericTypeDefinition() == typeof(UnauthenticatedPacketProcessor <>));
        }
Beispiel #18
0
        private void Update()
        {
            PacketProcessor.ProcessPacketQueue();

            if (SimulatedWorld.IsGameLoaded)
            {
                mechaSynchonizationTimer += Time.deltaTime;
                if (mechaSynchonizationTimer > MECHA_SYNCHONIZATION_INTERVAL)
                {
                    SendPacket(new PlayerMechaData(GameMain.mainPlayer));
                    mechaSynchonizationTimer = 0f;
                }
            }
        }
Beispiel #19
0
        /* END OF MAIL TAB*/

        private async void materialRaisedButton13_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtPlayerID.Text))
            {
                MessageBox.Show("The Player-ID can't be empty!", "Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
            }
            else
            {
                var id     = Convert.ToInt64(txtPlayerID.Text);
                var player = await ResourcesManager.GetPlayer(id);

                PacketProcessor.Send(new OutOfSyncMessage(player.GetClient()));
            }
        }
        /// <summary>
        /// Execute command on server.
        /// </summary>
        /// <param name="command">Command name.</param>
        /// <param name="arguments">Command arguments.</param>
        public void ExecuteCommand(string command, List <string> arguments)
        {
            NetDataWriter writer = new NetDataWriter();

            writer.Put(command);
            writer.PutArray(arguments.ToArray());
            PacketProcessor.Send <ServerInteractPacket>(Peer,
                                                        new ServerInteractPacket()
            {
                AddonId = Assembly.GetCallingAssembly().GetAddonId(),
                Type    = (byte)ServerInteractionType.ExecuteCommand,
                Data    = writer.Data,
            }, DeliveryMethod.ReliableOrdered);
        }
Beispiel #21
0
    // Use this for initialization
    void OnEnable()
    {
        serverResponseFinished  = false;
        characterServerResponse = new List <SubPacket>();
        CharacterQueryPacket cq           = new CharacterQueryPacket(Utils.GetAccountName());
        SubPacket            sp           = cq.BuildQueryPacket();
        BasePacket           packetToSend = BasePacket.CreatePacket(sp, PacketProcessor.isAuthenticated, false);

        packetProcessor = GameObject.FindGameObjectWithTag("PacketProcessor").GetComponent <PacketProcessor>();
        statusBoxHandler.InstantiateStatusBoxPrefabWithNoMenuLink(MenuPrefabs.StatusBox);
        StatusBoxHandler.statusText = "Status: Retrieving character list from server";

        packetProcessor.SendPacket(packetToSend);
        StartCoroutine(WaitForServerResponseThenDisplayCharacters());
    }
Beispiel #22
0
 // Start is called before the first frame update
 public Client(Engine engine, ClientPlayer player)
 {
     _engine           = engine;
     _serverIpEndPoint = new IPEndPoint(IPAddress.Parse(engine.serverIp), engine.serverListeningPort);
     _packetProcessor  = new PacketProcessor(null, engine.clientListeningPort, true);
     players           = new Dictionary <int, ClientPlayer>();
     enemies           = new Dictionary <int, ClientEnemy>();
     _interpolation    = new Interpolation(engine);
     _prediction       = new Prediction(player, _engine.playerId);
     _player           = player;
     _floorMask        = LayerMask.GetMask("Floor");
     _healthSlider     = GameObject.FindGameObjectsWithTag("Health")[0].GetComponent <Slider>();
     _damageImage      = GameObject.FindGameObjectsWithTag("DamageImage")[0].GetComponent <Image>();
     _packetProcessor.SendReliableFastData(null, _serverIpEndPoint, MessageType.Join, _sequence);
 }
    private void SendDeleteCharacterRequest()
    {
        CharacterDeletePacket cd           = new CharacterDeletePacket(characterID);
        SubPacket             sp           = cd.GetQueryPacket();
        BasePacket            packetToSend = BasePacket.CreatePacket(sp, PacketProcessor.isAuthenticated, false);

        var box = gameObject.GetComponent <StatusBoxHandler>();

        box.InstantiateStatusBoxPrefabWithNoMenuLink(MenuPrefabs.StatusBox);
        StatusBoxHandler.statusText = "Waiting for response from server..";
        PacketProcessor packetProcessor = GameObject.FindGameObjectWithTag("PacketProcessor").GetComponent <PacketProcessor>();

        packetProcessor.SendPacket(packetToSend);
        StartCoroutine(WaitForServerResponse(box));
    }
Beispiel #24
0
 public override void Process(Level level)
 {
     if (string.IsNullOrEmpty(PlayerName) || PlayerName.Length > 15)
     {
         ResourcesManager.DisconnectClient(Client);
     }
     else
     {
         level.GetPlayerAvatar().SetName(PlayerName);
         AvatarNameChangeOkMessage p = new AvatarNameChangeOkMessage(Client);
         p.SetAvatarName(level.GetPlayerAvatar().GetAvatarName());
         PacketProcessor.Send(p);
     }
     //new RequestConfirmChangeNameMessage(Client, PlayerName);
 }
Beispiel #25
0
 /// <summary>
 /// 收到协议包
 /// </summary>
 /// <param name="pkg"></param>
 public override void OnRecvPacket(GSPacketIn pkg)
 {
     if (m_packetProcessor == null)
     {
         m_packetLib       = AbstractPacketLib.CreatePacketLibForVersion(1, this);
         m_packetProcessor = new PacketProcessor(this);
     }
     if (m_player != null)
     {
         pkg.ClientID = m_player.PlayerId;
         pkg.WriteHeader();
     }
     //LogMsg(Marshal.ToHexDump("recevie:", pkg.Buffer, 0, pkg.Length));
     m_packetProcessor.HandlePacket(pkg);
 }
        /// <summary>
        /// Display hint on server.
        /// </summary>
        /// <param name="message">The message to be sent.</param>
        /// <param name="duration">Duration of hint.</param>
        /// <param name="isAdminOnly">Is displayed only for admins.</param>
        public void SendHint(string message, float duration, bool isAdminOnly = false)
        {
            NetDataWriter writer = new NetDataWriter();

            writer.Put(message);
            writer.Put(duration);
            writer.Put(isAdminOnly);
            PacketProcessor.Send <ServerInteractPacket>(Peer,
                                                        new ServerInteractPacket()
            {
                AddonId = Assembly.GetCallingAssembly().GetAddonId(),
                Type    = (byte)ServerInteractionType.Hint,
                Data    = writer.Data,
            }, DeliveryMethod.ReliableOrdered);
        }
Beispiel #27
0
        public bool ProcessPacket(Guid sourcePlayerId, Packet packet)
        {
#if DEBUG
            Console.WriteLine($"Handling packet {packet.GetType().Name} from {sourcePlayerId}");
#endif
            Type packetType = packet.GetType();
            if (!registeredProcessors.ContainsKey(packetType))
            {
                return(false);
            }

            PacketProcessor processor = registeredProcessors.First(p => p.Key == packetType).Value;
            processor.ProcessPacket(sourcePlayerId, packet, processorContext);
            return(true);
        }
        public override async void Execute(Level level)
        {
            try
            {
                ClientAvatar player     = level.GetPlayerAvatar();
                long         allianceID = player.GetAllianceId();
                Alliance     alliance   = await ObjectManager.GetAlliance(allianceID);

                ChallangeStreamEntry cm = new ChallangeStreamEntry();
                cm.SetMessage(Message);
                cm.SetSenderId(player.GetId());
                cm.SetSenderName(player.GetAvatarName());
                cm.SetSenderLevel(player.GetAvatarLevel());
                cm.SetSenderRole(await player.GetAllianceRole());
                cm.SetId(alliance.GetChatMessages().Count + 1);
                cm.SetSenderLeagueId(player.GetLeagueId());

                StreamEntry s = alliance.GetChatMessages().Find(c => c.GetStreamEntryType() == 12);
                if (s != null)
                {
                    alliance.GetChatMessages().RemoveAll(t => t == s);

                    foreach (AllianceMemberEntry op in alliance.GetAllianceMembers())
                    {
                        Level alliancemembers = await ResourcesManager.GetPlayer(op.GetAvatarId());

                        if (alliancemembers.GetClient() != null)
                        {
                            PacketProcessor.Send(new AllianceStreamEntryRemovedMessage(alliancemembers.GetClient(), s.GetId()));
                        }
                    }
                }

                alliance.AddChatMessage(cm);

                foreach (AllianceMemberEntry op in alliance.GetAllianceMembers())
                {
                    Level alliancemembers = await ResourcesManager.GetPlayer(op.GetAvatarId());

                    if (alliancemembers.GetClient() != null)
                    {
                        AllianceStreamEntryMessage p = new AllianceStreamEntryMessage(alliancemembers.GetClient());
                        p.SetStreamEntry(cm);
                        PacketProcessor.Send(p);
                    }
                }
            } catch (Exception) { }
        }
Beispiel #29
0
        private async void materialRaisedButton14_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtPlayerID.Text))
            {
                MessageBox.Show("The Player-ID can't be empty!", "Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
            }
            else
            {
                long  id     = Convert.ToInt64(txtPlayerID.Text);
                Level player = await ResourcesManager.GetPlayer(id);

                player.SetAccountStatus(100);
                DatabaseManager.Single().Save(player);
                PacketProcessor.Send(new OutOfSyncMessage(player.GetClient()));
            }
        }
 public override void Execute(Level level)
 {
     if (level.GetAccountPrivileges() >= GetRequiredAccountPrivileges())
     {
         foreach (var onlinePlayer in ResourcesManager.GetOnlinePlayers())
         {
             var p = new ShutdownStartedMessage(onlinePlayer.GetClient());
             p.SetCode(5);
             PacketProcessor.Send(p);
         }
     }
     else
     {
         SendCommandFailedMessage(level.GetClient());
     }
 }
 public override void Execute(Level level)
 {
     if (level.GetAccountPrivileges() >= GetRequiredAccountPrivileges())
     {
         var p = level.GetPlayerAvatar();
         p.SetResourceCount(CSVManager.DataTables.GetResourceByName("Gold"), 999999999);
         p.SetResourceCount(CSVManager.DataTables.GetResourceByName("Elixir"), 999999999);
         p.SetResourceCount(CSVManager.DataTables.GetResourceByName("DarkElixir"), 999999999);
         p.SetDiamonds(999999999);
         PacketProcessor.Send(new OwnHomeDataMessage(level.GetClient(), level));
     }
     else
     {
         SendCommandFailedMessage(level.GetClient());
     }
 }
Beispiel #32
0
        private void ProcessUnauthenticated(Packet packet, NitroxConnection connection)
        {
            try
            {
                Type serverPacketProcessorType = typeof(UnauthenticatedPacketProcessor <>);
                Type packetType          = packet.GetType();
                Type packetProcessorType = serverPacketProcessorType.MakeGenericType(packetType);

                PacketProcessor processor = (PacketProcessor)NitroxServiceLocator.LocateService(packetProcessorType);
                processor.ProcessPacket(packet, connection);
            }
            catch (Exception ex)
            {
                Log.Error(ex, $"Received invalid, unauthenticated packet: {packet}");
            }
        }
    void Start()
    {
        EventBasedNetListener listener = new EventBasedNetListener();

        client = new NetManager(listener);

        listener.PeerConnectedEvent    += peer => Debug.Log("connected to server");
        listener.PeerDisconnectedEvent += handleDisconnect;
        listener.NetworkReceiveEvent   += PacketProcessor.ReadAllPackets;

        PacketProcessor.Subscribe <ServerReadyToReceiveDeckSignalPacket>(handleServerReadyToReceiveDeck);
        PacketProcessor.Subscribe <MatchManager>(handleManagerPacket);

        client.Start();
        server = client.Connect(IP, NetworkConstants.ServerPort, NetworkConstants.VersionNumberConnectionKey);
    }
        public override async void Process(Level level)
        {
            try
            {
                Level targetLevel = await ResourcesManager.GetPlayer(AvatarId);

                targetLevel.Tick();
                Alliance alliance = await ObjectManager.GetAlliance(level.GetPlayerAvatar().GetAllianceId());

                PacketProcessor.Send(new VisitedHomeDataMessage(Client, targetLevel, level));
                if (alliance != null)
                {
                    PacketProcessor.Send(new AllianceStreamMessage(Client, alliance));
                }
            } catch (Exception) { }
        }
        private void RawPacketReceived(object sender, RawServerPacketEventArgs e)
        {
            IDataPacket parsedPacket;
            var         rawDat = e.RawData;

            rawDat = PacketProcessor.ProcessRawData(rawDat);
            using (var ms = new MemoryStream(rawDat)
            {
                Position = 2
            })
            {
                parsedPacket = PacketProcessor.ParsePacket(ms);
                parsedPacket.DeserializeFrom(ms);
            }
            OnPacketReceived.Raise(this, new ServerPacketEventArgs(parsedPacket, e.Peer, this, e.RawData.Length));
        }
Beispiel #36
0
        bool SendRawPacketInternal(RawPacket packet, byte[] buffer,
                                   Socket socket, TeraEncryptionSession encryption, bool server)
        {
            lock (socket)
            {
                var header = new PacketHeader((ushort)packet.Payload.Length,
                                              Proxy.Processor.Serializer.GameMessages.NameToOpCode[packet.OpCode]);

                PacketProcessor.WriteHeader(header, buffer);
                Buffer.BlockCopy(packet.Payload, 0, buffer,
                                 PacketHeader.HeaderSize, header.Length);

                return(SendInternal(buffer, header.FullLength, false,
                                    socket, encryption, server));
            }
        }
Beispiel #37
0
        public override async void Execute(Level level)
        {
            try
            {
                ClientAvatar            player = level.GetPlayerAvatar();
                TroopRequestStreamEntry cm     = new TroopRequestStreamEntry();
                Alliance all = await ObjectManager.GetAlliance(player.GetAllianceId());

                cm.SetId(all.GetChatMessages().Count + 1);
                cm.SetSenderId(player.GetId());
                cm.SetHomeId(player.GetId());
                cm.SetSenderLeagueId(player.GetLeagueId());
                cm.SetSenderName(player.GetAvatarName());
                cm.SetSenderRole(await player.GetAllianceRole());
                cm.SetMessage(Message);
                cm.SetMaxTroop(player.GetAllianceCastleTotalCapacity());

                all.AddChatMessage(cm);

                StreamEntry s = all.GetChatMessages().Find(c => c.GetSenderId() == level.GetPlayerAvatar().GetId() && c.GetStreamEntryType() == 1);
                if (s == null)
                {
                    all.GetChatMessages().RemoveAll(t => t == s);
                }
                all.AddChatMessage(cm);

                foreach (AllianceMemberEntry op in all.GetAllianceMembers())
                {
                    Level aplayer = await ResourcesManager.GetPlayer(op.GetAvatarId());

                    if (aplayer.GetClient() != null)
                    {
                        if (s != null)
                        {
                            PacketProcessor.Send(new AllianceStreamEntryRemovedMessage(aplayer.GetClient(), s.GetId()));
                        }
                        AllianceStreamEntryMessage p = new AllianceStreamEntryMessage(aplayer.GetClient());
                        p.SetStreamEntry(cm);
                        PacketProcessor.Send(p);
                    }
                }
            }
            catch (Exception)
            {
                ResourcesManager.DropClient(level.GetClient().GetSocketHandle());
            }
        }
Beispiel #38
0
        public override void Update()
        {
            PacketProcessor.ProcessPacketQueue();

            if (Multiplayer.Session.IsGameLoaded)
            {
                gameResearchHashUpdateTimer     += Time.deltaTime;
                productionStatisticsUpdateTimer += Time.deltaTime;
                dysonLaunchUpateTimer           += Time.deltaTime;
                dysonSphereUpdateTimer          += Time.deltaTime;
                warningUpdateTimer += Time.deltaTime;

                if (gameResearchHashUpdateTimer > GAME_RESEARCH_UPDATE_INTERVAL)
                {
                    gameResearchHashUpdateTimer = 0;
                    if (GameMain.data.history.currentTech != 0)
                    {
                        TechState state = GameMain.data.history.techStates[GameMain.data.history.currentTech];
                        SendPacket(new GameHistoryResearchUpdatePacket(GameMain.data.history.currentTech, state.hashUploaded, state.hashNeeded));
                    }
                }

                if (productionStatisticsUpdateTimer > STATISTICS_UPDATE_INTERVAL)
                {
                    productionStatisticsUpdateTimer = 0;
                    Multiplayer.Session.Statistics.SendBroadcastIfNeeded();
                }

                if (dysonLaunchUpateTimer > LAUNCH_UPDATE_INTERVAL)
                {
                    dysonLaunchUpateTimer = 0;
                    Multiplayer.Session.Launch.SendBroadcastIfNeeded();
                }

                if (dysonSphereUpdateTimer > DYSONSPHERE_UPDATE_INTERVAL)
                {
                    dysonSphereUpdateTimer = 0;
                    Multiplayer.Session.DysonSpheres.UpdateSphereStatusIfNeeded();
                }

                if (warningUpdateTimer > WARNING_UPDATE_INTERVAL)
                {
                    warningUpdateTimer = 0;
                    Multiplayer.Session.Warning.SendBroadcastIfNeeded();
                }
            }
        }
        public override async void Process(Level level)
        {
            try
            {
                if (level.GetPlayerAvatar().State == ClientAvatar.UserState.CHA)
                {
                    ResourcesManager.DisconnectClient(Client);
                }
                else
                {
                    level.GetPlayerAvatar().State = ClientAvatar.UserState.CHA;
                    Alliance a = await ObjectManager.GetAlliance(level.GetPlayerAvatar().GetAllianceId());

                    Level defender = await ResourcesManager.GetPlayer(a.GetChatMessages().Find(c => c.GetId() == ID).GetSenderId());

                    if (defender != null)
                    {
                        defender.Tick();
                        PacketProcessor.Send(new ChallangeAttackDataMessage(Client, defender));
                    }
                    else
                    {
                        new OwnHomeDataMessage(Client, level);
                    }

                    Alliance alliance = await ObjectManager.GetAlliance(level.GetPlayerAvatar().GetAllianceId());

                    StreamEntry s = alliance.GetChatMessages().Find(c => c.GetStreamEntryType() == 12);
                    if (s != null)
                    {
                        alliance.GetChatMessages().RemoveAll(t => t == s);

                        foreach (AllianceMemberEntry op in alliance.GetAllianceMembers())
                        {
                            Level playera = await ResourcesManager.GetPlayer(op.GetAvatarId());

                            if (playera.GetClient() != null)
                            {
                                AllianceStreamEntryMessage p = new AllianceStreamEntryMessage(playera.GetClient());
                                p.SetStreamEntry(s);
                                PacketProcessor.Send(p);
                            }
                        }
                    }
                }
            } catch (Exception) { }
        }
Beispiel #40
0
        public uNetClient(string host, uint port, ClientSettings settings)
        {
            EndPoint    = new IPEndPoint(IPAddress.Parse(host), (int)port);
            _uNetClient = new TcpClient();
            Settings    = settings;

            BufferSize = Settings.ReceiveBufferSize;
            Processor  = new PacketProcessor(Settings);

            Processor.OnPacketSent += (o, e) =>
            {
                if (OnPacketSent != null)
                {
                    OnPacketSent(o, e);
                }
            };
        }
Beispiel #41
0
        public static PacketProcessResult HandleLogonAuthProof(PacketProcessor p)
        {
            p.dataNeeded = 75; //1 op, 32 A, 20 M1, 20 crc_hash, 1 number_of_keys, 1 unk
            if (p.currentPacket.Length < p.dataNeeded) return PacketProcessResult.RequiresData;

            AuthLogonProof proof = new AuthLogonProof();

            proof.A = p.currentPacket.ReadBytes(32);
            proof.M1 = p.currentPacket.ReadBytes(20);
            proof.crchash = p.currentPacket.ReadBytes(20);
            proof.number_of_keys = p.currentPacket.ReadByte();
            proof.unk = p.currentPacket.ReadByte();

            if (p.sock != null && p.sock.session != null)
                p.sock.session.OnLogonProof(proof);

            return PacketProcessResult.Processed;
        }
Beispiel #42
0
        static void Main(string[] args)
        {
            Console.Title = "ConquerServer - Game";

            GameServerSocket Server = new GameServerSocket() ;
            Server.OnClientConnected = OnClientConnect;
            Server.OnClientDisconnected = OnClientDisconnect;
            Server.OnClientReceived = OnClientReceive;
            Server.Initialize();

            Database = new DatabaseManager();
            PacketProcessor = new PacketProcessor(Database);

            ItemTypeLoader = new ItemTypeLoader();
            ItemTypeLoader.LoadItems();

            Kernel.LoadMaps();

            while (true)
            {
                Thread.Sleep(1);
            }
        }
Beispiel #43
0
        public static PacketProcessResult HandleLogonAuthChallenge(PacketProcessor p)
        {
            if (p.currentPacket.Length < 4)
            {
                p.dataNeeded = 4; //1 opcode, 1 version, 2 data_size
                return PacketProcessResult.RequiresData;
            }

            byte proto_version = p.currentPacket.ReadByte();
            UInt16 data_size = p.currentPacket.ReadUInt16();

            if (p.currentPacket.Length < 4 + data_size)
            {
                p.dataNeeded = 4 + data_size; //1 opcode, 1 version, 2 data_size, data_size data
                return PacketProcessResult.RequiresData;
            }

            AuthLogonChallenge challenge = new AuthLogonChallenge();

            challenge.client = p.currentPacket.ReadFourCC();
            challenge.client_major = p.currentPacket.ReadByte();
            challenge.client_minor = p.currentPacket.ReadByte();
            challenge.client_revision = p.currentPacket.ReadByte();
            challenge.client_build = p.currentPacket.ReadUInt16();
            challenge.processor = p.currentPacket.ReadFourCC();
            challenge.os = p.currentPacket.ReadFourCC();
            challenge.locale = p.currentPacket.ReadFourCC();
            challenge.category = p.currentPacket.ReadInt32();
            challenge.ipaddr = new IPAddress(p.currentPacket.ReadBytes(4));
            challenge.account = p.currentPacket.ReadString();

            if (p.sock != null && p.sock.session != null)
                p.sock.session.OnLogonChallenge(challenge);

            return PacketProcessResult.Processed;
        }
Beispiel #44
0
        public static PacketProcessResult HandleCharEnum(PacketProcessor p)
        {
            p.sock.session.HandleCharEnum();

            return PacketProcessResult.Processed;
        }
Beispiel #45
0
        public StarProxy(IStarServer server, IConfiguration config, IPacketTypeCollection packetTypes, ILogger<StarProxy> logger,
            IStarEventManager evtManager, SocketAsyncEventArgsPool socketPool, Socket clientSocket)
        {
            if (clientSocket == null)
                throw new ArgumentNullException(nameof(clientSocket));

            Server = server;
            ClientPacketProcessor = new PacketProcessor(packetTypes);
            ServerPacketProcessor = new PacketProcessor(packetTypes);
            ClientSocket = clientSocket;
            _logger = logger;
            _eventManager = evtManager;
            _isDisposed = false;
            _isAlive = 0;
            _socketArgsPool = socketPool;
            _cancelToken = new CancellationTokenSource();
            _clientSem = new SemaphoreSlim(1);
            _serverSem = new SemaphoreSlim(1);
            _packetBacklog = new BlockingCollection<PacketBacklogItem>(new ConcurrentQueue<PacketBacklogItem>());
            _remoteEndPoint = new IPEndPoint(Dns.GetHostAddressesAsync(config["SBHost"]).Result.First(), int.Parse(config["SBPort"]));
        }
Beispiel #46
0
 public HandlerDelegate(PacketProcessor pAction, PacketFlags pFlags)
 {
     mProcessor = pAction;
     mFlags = pFlags;
 }
Beispiel #47
0
        public static PacketProcessResult HandleReadyForAccountDataTimes(PacketProcessor p)
        {
            p.ClientConnection.CurrentSession.HandleReadyForAccountDataTimes();

            return PacketProcessResult.Processed;
        }
Beispiel #48
0
        public static PacketProcessResult HandleCharEnum(PacketProcessor p)
        {
            p.ClientConnection.CurrentSession.HandleCharEnum();

            return PacketProcessResult.Processed;
        }
Beispiel #49
0
        public static PacketProcessResult HandleReadyForAccountDataTimes(PacketProcessor p)
        {
            p.sock.session.HandleReadyForAccountDataTimes();          

            return PacketProcessResult.Processed;
        }