/// <summary>
        /// Creates a new <see cref="RequestContent"/> instance for the given client and packet
        /// </summary>
        /// <param name="gameClient">The <see cref="GameClientAsync"/> that has received a packet of information</param>
        /// <param name="packet">The <see cref="PacketAsync"/> of data that was received</param>
        public RequestContent(
            GameClientAsync gameClient,
            PacketAsync packet)
        {
            this.Client = gameClient;
            this.OpCode = packet.Code;
            this.Data   = packet.Data;

            if (this.OpCode == OpCodes.OPCODE_DATA)
            {
                // For the DATA opcode, we have some special handling
                // that needs to occur now. This additional logic is
                // responsible for the "data opcode" and also properly
                // decoding the data payload
                var data = packet.Data;
                if (Client != null) // Client can be NULL if we're just asking 'can we handle this'
                {
                    Client.SetClientSequenceNumber(swap16(BitConverter.ToUInt16(data, 2)));
                }
                var arglen = (ushort)(swap16(BitConverter.ToUInt16(data, 6)) - 2);
                var code   = swap16(BitConverter.ToUInt16(data, 8));
                var m      = new MemoryStream();
                m.Write(data, 10, arglen);

                this.DataOpCode = code;
                this.Data       = m.ToArray();
            }
        }
 public void AddClient(GameClientAsync client)
 {
     this.logger.Information($"Client {client.ClientIndex} has connected");
     client.OnGameClientDisconnected += Client_OnGameClientDisconnected;
     this.clients.Add(client);
     this.logger.Information($"There are {clients.Count:N0} connected clients");
 }
 /// <summary>
 /// Sends all the currently logged in clients information to the newly joined client
 /// </summary>
 /// <param name="client">The client that is joining</param>
 /// <returns>A promise to submit all information to the client</returns>
 public async Task ClientJoinedLobbyAsync(GameClientAsync client)
 {
     // Tell the incoming client who all is in the lobby
     foreach (var existing in this.clients)
     {
         await client.SendDataPacket(OpCodes.OPCODE_DATA_LOBBY_STATUS_UPDATE, existing.Value.last_status ?? new byte[0]);
     }
     this.clients.AddOrUpdate(client.ClientIndex, client, (index, existing) => client);
 }
        /// <summary>
        /// Sends all the currently logged in clients information to the newly joined client (Aggregate Response for packet handler)
        /// </summary>
        /// <param name="client">The client that is joining</param>
        /// <returns>A promise to submit all information to the client</returns>
        public IEnumerable <ResponseContent> ClientJoinedLobbyPacketHandler(GameClientAsync client, RequestContent request)
        {
            List <ResponseContent> responseContents = new List <ResponseContent>();

            // Tell the incoming client who all is in the lobby
            foreach (var existing in this.clients)
            {
                responseContents.Add(request.CreateResponse(OpCodes.OPCODE_DATA_LOBBY_STATUS_UPDATE, existing.Value.last_status ?? new byte[0]));
            }
            this.clients.AddOrUpdate(client.ClientIndex, client, (index, existing) => client);
            return(responseContents);
        }
 public bool TryGetClient(uint index, out GameClientAsync client)
 {
     client = null;
     foreach (var c in clients)
     {
         if (c.ClientIndex == index)
         {
             client = c;
             return(true);
         }
     }
     return(false);
 }
示例#6
0
        public static AreaServerModel ConvertDate(GameClientAsync client)
        {
            if (null == client.AreaServerName)
            {
                return(null);
            }


            AreaServerModel model = new AreaServerModel();

            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

            model._serverName      = Encoding.GetEncoding("Shift-JIS").GetString(client.AreaServerName, 0, client.AreaServerName.Length - 1);
            model._serverLevel     = client.AreaServerLevel;
            model._serverStatus    = client.AreaServerStatus == 0 ? "Available" : "Busy";
            model._numberOfPlayers = client.Players;

            return(model);
        }
        public static PlayerModel ConvertData(GameClientAsync client)
        {
            PlayerModel model = new PlayerModel();

            /*
             *
             * Console.WriteLine("Character Date \n save_slot "+ save_slot + "\n char_id " +Encoding.ASCII.GetString(save_id) + " \n char_name " + Encoding.ASCII.GetString(char_id) +
             *                "\n char_class " + char_class + "\n char_level " + char_level + "\n greeting "+ Encoding.ASCII.GetString(greeting) +"\n charmodel " +char_model + "\n char_hp " + char_HP+
             *                "\n char_sp " + char_SP + "\n char_gp " + char_GP + "\n onlien god counter "+ online_god_counter + "\n offline god counter "+ offline_godcounter +"\n\n\n\n full byte araray " + BitConverter.ToString(data));
             *
             */

            if (null == client.save_id || null == client.char_id ||
                null == client.char_name || null == client.greeting)
            {
                return(null);
            }

            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

            model.save_slot = client.save_slot;
            model.save_id   = Encoding.GetEncoding("Shift-JIS").GetString(client.save_id, 0, client.save_id.Length - 1);
            model.char_id   = Encoding.GetEncoding("Shift-JIS").GetString(client.char_id, 0, client.char_id.Length - 1);
            model.char_name = Encoding.GetEncoding("Shift-JIS").GetString(client.char_name, 0, client.char_name.Length - 1);

            PlayerClass playerClass = (PlayerClass)client.char_class;

            model.char_class = playerClass.ToString();
            model.char_level = client.char_level;

            model.greeting           = Encoding.GetEncoding("Shift-JIS").GetString(client.greeting, 0, client.greeting.Length - 1);
            model.char_model         = (int)client.char_model;
            model.char_HP            = client.char_HP;
            model.char_SP            = client.char_SP;
            model.char_GP            = (int)client.char_GP;
            model.online_god_counter = client.online_god_counter;
            model.offline_godCounter = client.offline_godcounter;
            model.charModelFile      = client.charModelFile;

            return(model);
        }
        uint ExtractCharacterData(GameClientAsync client, byte[] data)
        {
            client.save_slot = data[0];
            client.char_id   = ReadByteString(data, 1);
            int pos = 1 + client.char_id.Length;

            client.char_name = ReadByteString(data, pos);
            pos += client.char_name.Length;
            client.char_class = data[pos++];
            client.char_level = swap16(BitConverter.ToUInt16(data, pos));
            pos                      += 2;
            client.greeting           = ReadByteString(data, pos);
            pos                      += client.greeting.Length;
            client.char_model         = swap32(BitConverter.ToUInt32(data, pos));
            pos                      += 5;
            client.char_HP            = swap16(BitConverter.ToUInt16(data, pos));
            pos                      += 2;
            client.char_SP            = swap16(BitConverter.ToUInt16(data, pos));
            pos                      += 2;
            client.char_GP            = swap32(BitConverter.ToUInt32(data, pos));
            pos                      += 4;
            client.online_god_counter = swap16(BitConverter.ToUInt16(data, pos));
            pos                      += 2;
            client.offline_godcounter = swap16(BitConverter.ToUInt16(data, pos));
            pos                      += 2;
            client.goldCoinCount      = swap16(BitConverter.ToUInt16(data, pos));
            pos                      += 2;
            client.silverCoinCount    = swap16(BitConverter.ToUInt16(data, pos));
            pos                      += 2;
            client.bronzeCoinCount    = swap16(BitConverter.ToUInt16(data, pos));

            client.classLetter = GetCharacterModelClass(client.char_model);
            client.modelNumber = GetCharacterModelNumber(client.char_model);
            client.modelType   = GetCharacterModelType(client.char_model);
            client.colorCode   = GetCharacterModelColorCode(client.char_model);

            client.charModelFile = "xf" + client.classLetter + client.modelNumber + client.modelType + "_" + client.colorCode;
            return(DBAccess.getInstance().PlayerLogin(client));
        }
 public void RemoveClient(GameClientAsync client)
 {
     this.logger.Information($"Client {client.ClientIndex} has disconnected");
     this.clients.Remove(client);
     this.logger.Information($"There are {clients.Count:N0} connected clients");
 }
示例#10
0
        public uint PlayerLogin(GameClientAsync client)
        {
            ///////////////Player Logging ///////////////////////////////////////////////////////////////////////////////
            RankingDataModel model = new RankingDataModel();


            DateTime dateTime = DateTime.UtcNow;

            model.antiCheatEngineResult = "LEGIT";
            model.loginTime             = dateTime.ToString("ddd MMM dd hh:mm:ss yyyy");
            model.diskID          = "DUMMY DISK ID VALUE !";
            model.saveID          = _encoding.GetString(client.save_id, 0, client.save_id.Length - 1);
            model.characterSaveID = _encoding.GetString(client.char_id, 0, client.char_id.Length - 1);
            model.characterName   = _encoding.GetString(client.char_name, 0, client.char_name.Length - 1);
            //Buffer.BlockCopy(client.char_name,0,model.characterName,0,client.char_name.Length-1);

            PlayerClass playerClass = (PlayerClass)client.char_class;

            model.characterClassName = playerClass.ToString();
            model.characterLevel     = client.char_level;

            model.characterHP            = client.char_HP;
            model.characterSP            = client.char_SP;
            model.characterGP            = (int)client.char_GP;
            model.godStatusCounterOnline = client.online_god_counter;
            model.averageFieldLevel      = client.offline_godcounter;
            model.accountID = client.AccountId;
            ///////////////Player Logging ///////////////////////////////////////////////////////////////////////////////

            using ISession session = _sessionFactory.OpenSession();

            using ITransaction transaction = session.BeginTransaction();

            CharacterRepositoryModel characterRepositoryModel;

            characterRepositoryModel = session.Query <CharacterRepositoryModel>().SingleOrDefault(
                x => x.accountID == client.AccountId && x.charachterSaveID.Equals(model.characterSaveID));
            if (characterRepositoryModel == null || characterRepositoryModel.PlayerID == -1 ||
                characterRepositoryModel.PlayerID == 0)
            {
                characterRepositoryModel = new CharacterRepositoryModel();

                characterRepositoryModel.GuildID     = 0;
                characterRepositoryModel.GuildMaster = 0;

                characterRepositoryModel.accountID        = client.AccountId;
                characterRepositoryModel.charachterSaveID = model.characterSaveID;
            }
            characterRepositoryModel.CharachterName  = client.char_name;
            characterRepositoryModel.Greeting        = client.greeting;
            characterRepositoryModel.ClassID         = client.char_class;
            characterRepositoryModel.CharachterLevel = client.char_level;
            characterRepositoryModel.OnlineStatus    = true;
            characterRepositoryModel.ModelNumber     = (int)client.char_model;
            characterRepositoryModel.charHP          = client.char_HP;
            characterRepositoryModel.charSP          = client.char_SP;
            characterRepositoryModel.charGP          = (int)client.char_GP;
            characterRepositoryModel.charOnlineGoat  = client.online_god_counter;
            characterRepositoryModel.charOfflineGoat = client.offline_godcounter;
            characterRepositoryModel.charGoldCoin    = client.goldCoinCount;
            characterRepositoryModel.charSilverCoin  = client.silverCoinCount;
            characterRepositoryModel.charBronzeCoin  = client.bronzeCoinCount;


            session.Save(model);
            session.SaveOrUpdate(characterRepositoryModel);
            transaction.Commit();

            session.Close();

            return((uint)characterRepositoryModel.PlayerID);
        }
 public bool TryFindLobby(GameClientAsync gameClientAsync, out LobbyChatRoom lobbyChatRoom)
 {
     return(TryFindLobby((uint)gameClientAsync.ClientIndex, out lobbyChatRoom));
 }