public Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
        {
            var responses = new List <ResponseContent>();
            var u         = swap16(BitConverter.ToUInt16(request.Data, 0));

            // This is very similar to the area server handler
            // If this is zero, show the guild category breakdown (basically)
            // otherwise, show them all the guilds
            if (u == 0)
            {
                // Tell them we have ONE guild listing
                responses.Add(request.CreateResponse(0x7734, new byte[] { 0x00, 0x01 }));

                // This should print "ALL" on the game
                responses.Add(request.CreateResponse(0x7736, new byte[] { 0x00, 0x01, 0x41, 0x6c, 0x6c, 0x00 }));
            }
            else
            {
                var listOfGuilds = guildManagementService.GetListOfGuilds();
                responses.Add(request.CreateResponse(0x7737, BitConverter.GetBytes(swap16((ushort)listOfGuilds.Count))));
                foreach (var guildName in listOfGuilds)
                {
                    responses.Add(request.CreateResponse(0x7738, guildName));
                }
            }
            return(Task.FromResult <IEnumerable <ResponseContent> >(responses));
        }
        public async Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
        {
            var responses = new List <ResponseContent>();
            var u         = swap16(BitConverter.ToUInt16(request.Data, 0));

            if (u == 0)
            {
                var categoryList = await bulletinBoardService.GetCategoriesAsync();

                responses.Add(request.CreateResponse(OpCodes.OPCODE_DATA_BBS_CATEGORYLIST, BitConverter.GetBytes(swap16((ushort)categoryList.Count))));
                foreach (var category in categoryList)
                {
                    var categoryData = await bulletinBoardService.ConvertCategoryToBytesAsync(category);

                    responses.Add(request.CreateResponse(OpCodes.OPCODE_DATA_BBS_ENTRY_CATEGORY, categoryData));
                }
            }
            else
            {
                var categoryID  = Convert.ToInt32(u);
                var threadsList = await bulletinBoardService.GetThreadsAsync(categoryID);

                responses.Add(request.CreateResponse(OpCodes.OPCODE_DATA_BBS_THREADLIST, BitConverter.GetBytes(swap16((ushort)threadsList.Count))));
                foreach (var thread in threadsList)
                {
                    var threadData = await bulletinBoardService.ConvertThreadToBytesAsync(thread);

                    responses.Add(request.CreateResponse(OpCodes.OPCODE_DATA_BBS_ENTRY_THREAD, threadData));
                }
            }
            return(responses);
        }
Example #3
0
        public Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
        {
            var responses = new List <ResponseContent>();
            var u         = swap16(BitConverter.ToUInt16(request.Data, 0));

            if (u == 0)// Guild Member Category List
            {
                List <byte[]> listOfClasses = GetClassList();
                responses.Add(request.CreateResponse(0x7611, BitConverter.GetBytes(swap16((ushort)listOfClasses.Count))));
                foreach (var className in listOfClasses)
                {
                    responses.Add(request.CreateResponse(0x7613, className));
                }
            }
            else //MemberList in that Category
            {
                List <byte[]> memberList = guildManagementService.GetGuildMembersListByClass(request.Client._guildID, u, request.Client._characterPlayerID);
                responses.Add(request.CreateResponse(0x7614, BitConverter.GetBytes(swap16((ushort)memberList.Count))));
                foreach (var member in memberList)
                {
                    responses.Add(request.CreateResponse(0x7615, member));
                }
            }
            return(Task.FromResult <IEnumerable <ResponseContent> >(responses));
        }
Example #4
0
        public async Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
        {
            var responses       = new List <ResponseContent>();
            var nonGuildLobbies = new List <LobbyChatRoom>(lobbyChatService.Lobbies.Values.Where(c => c.Type == OpCodes.LOBBY_TYPE_MAIN));

            responses.Add(request.CreateResponse(OpCodes.OPCODE_DATA_LOBBY_LOBBYLIST, BitConverter.GetBytes(swap16((ushort)nonGuildLobbies.Count))));
            foreach (var room in nonGuildLobbies)
            {
                var m = new MemoryStream();
                await m.WriteAsync(BitConverter.GetBytes(swap16(room.ID)), 0, 2);

                foreach (char c in room.Name)
                {
                    m.WriteByte((byte)c);
                }
                m.WriteByte(0);
                await m.WriteAsync(BitConverter.GetBytes(swap16((ushort)room.Clients.Count)), 0, 2);

                await m.WriteAsync(BitConverter.GetBytes(swap16((ushort)(room.Clients.Count + 1))), 0, 2);

                // looks like some form of padding to align the message
                while (((m.Length + 2) % 8) != 0)
                {
                    m.WriteByte(0);
                }
                responses.Add(request.CreateResponse(OpCodes.OPCODE_DATA_LOBBY_ENTRY_LOBBY, m.ToArray()));
            }

            return(responses);
        }
        public override async Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
        {
            var responses = new List <ResponseContent>();

            if (request.DataOpCode == OpCodes.OPCODE_DATA_LOBBY_FAVORITES_AS_INQUIRY)
            {
                logger.LogData(request.Data, request.OpCode, request.Client.ClientIndex, "Get Bookmark", 0, 0);
                var encoding    = Encoding.GetEncoding("Shift-JIS");
                var areaServers = clientProviderService.AreaServers;
                responses.Add(request.CreateResponse(0x7859, BitConverter.GetBytes(((ushort)areaServers.Count).Swap())));

                // Now we need to send all the area servers to the client
                foreach (var client in areaServers)
                {
                    var m = new MemoryStream();
                    m.WriteByte(0);
                    if (client.ipEndPoint.Address == request.Client.ipEndPoint.Address)
                    {
                        await m.WriteAsync(client.ipdata, 0, 6);
                    }
                    else
                    {
                        await m.WriteAsync(client.externalIPAddress, 0, 6);
                    }

                    var buff = BitConverter.GetBytes((client.as_usernum.Swap()));
                    int pos  = 0;
                    while (client.publish_data_1[pos++] != 0)
                    {
                        ;
                    }
                    pos += 4;
                    client.publish_data_1[pos++] = buff[0];
                    client.publish_data_1[pos++] = buff[1];
                    await m.WriteAsync(client.publish_data_1, 0, client.publish_data_1.Length);

                    while (m.Length < 45)
                    {
                        m.WriteByte(0);
                    }

                    var usr  = encoding.GetString(BitConverter.GetBytes((client.as_usernum.Swap())));
                    var pup1 = encoding.GetString(client.publish_data_1);
                    var pup2 = encoding.GetString(client.publish_data_2);
                    logger.Debug($"AREA SERVER: {pup1}; {pup2}; {usr}", pup1, pup2, usr);

                    responses.Add(request.CreateResponse(0x786A, m.ToArray()));
                }

                return(responses);
            }


            else
            {
                return(await base.HandleIncomingRequestAsync(request));
            }
        }
        public async Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
        {
            bool isNew = await _newsService.CheckIfNewNewsForSaveId(_encoding.GetString(request.Client.save_id));

            if (isNew)
            {
                return(new[] { request.CreateResponse(OpCodes.OPCODE_DATA_NEWCHECK_OK, new byte[] { 0x00, 0x01 }) }); // send the new flag
            }
            else
            {
                return(new[] { request.CreateResponse(OpCodes.OPCODE_DATA_NEWCHECK_OK, new byte[] { 0x00, 0x00 }) }); //  there are no new articles to read
            }
        }
Example #7
0
 public Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
 {
     if (request.Data[1] == OpCodes.OPCODE_DATA_SERVERKEY_CHANGE)
     {
         _logger.Information("Client #{@clientIndex} has identified itself as an Area Server", request.Client.ClientIndex);
         request.Client.isAreaServer = true;
         return(Task.FromResult <IEnumerable <ResponseContent> >(new[] { request.CreateResponse(OpCodes.OPCODE_DATA_AREASERVER_OK, new byte[] { 0xDE, 0xAD }) }));
     }
     else
     {
         _logger.Information("Client #{@clientIndex} has identified itself as a Game Client (PS2 / PCSX2)", request.Client.ClientIndex);
         return(Task.FromResult <IEnumerable <ResponseContent> >(new[] { request.CreateResponse(OpCodes.OPCODE_DATA_LOGON_RESPONSE, new byte[] { 0x74, 0x32 }) }));
     }
 }
Example #8
0
        public Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
        {
            var responses = new List <ResponseContent>();
            var guildId   = swap16(BitConverter.ToUInt16(request.Data, 0));
            var listOfItemsForGeneralStore = guildManagementService.GetGuildItems(guildId, true);

            responses.Add(request.CreateResponse(OpCodes.OPCODE_DATA_GUILD_ITEMS_COUNT, BitConverter.GetBytes(swap16((ushort)listOfItemsForGeneralStore.Count))));

            foreach (var item in listOfItemsForGeneralStore)
            {
                responses.Add(request.CreateResponse(OpCodes.OPCODE_DATA_GUILD_ITEM_DETAILS, item));
            }

            return(Task.FromResult <IEnumerable <ResponseContent> >(responses));
        }
Example #9
0
        public async Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
        {
            var responses = new List <ResponseContent>();
            var accountId = ReadAccountID(request.Data, 0);
            var mail      = await mailService.GetMailAsync(accountId);

            responses.Add(request.CreateResponse(OpCodes.OPCODE_DATA_MAIL_GETOK, BitConverter.GetBytes(swap32((uint)mail.Count))));
            foreach (var item in mail)
            {
                var mailContent = await mailService.ConvertMailMetaIntoBytes(item);

                responses.Add(request.CreateResponse(OpCodes.OPCODE_DATA_MAIL_GET_NEWMAIL_HEADER, mailContent));
            }
            return(responses);
        }
Example #10
0
        public async Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
        {
            LobbyChatRoom room;
            var           currentLobbyIndex = (short)swap16(BitConverter.ToUInt16(request.Data, 0));
            var           currentLobbyType  = swap16(BitConverter.ToUInt16(request.Data, 2));

            logger.Verbose("Lobby Room ID: {@room_index}", currentLobbyIndex);
            logger.Verbose("Lobby Type ID: {@lobbyType}", currentLobbyType);

            if (currentLobbyType == OpCodes.LOBBY_TYPE_GUILD) //Guild Room
            {
                //TODO add Guild Specific Code
                room = lobbyChatService.GetOrAddLobby((ushort)currentLobbyIndex, "Guild Room", OpCodes.LOBBY_TYPE_GUILD, out var _);
            }
            else
            {
                lobbyChatService.TryGetLobby((ushort)currentLobbyIndex, out room);
            }

            var response = request.CreateResponse(OpCodes.OPCODE_DATA_LOBBY_ENTERROOM_OK, BitConverter.GetBytes(swap16((ushort)room.Clients.Count)));
            await room.ClientJoinedLobbyAsync(request.Client);

            logger.Information("Client #{@clientIndex} has joined Lobby {@lobbyName}. There are now {@lobbySize} client(s) in the room", new { clientIndex = request.Client.ClientIndex, lobbyName = room.Name, lobbySize = room.Clients.Count });
            return(new[] { response });
        }
        public async Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
        {
            var responses    = new List <ResponseContent>();
            var i            = swap32(BitConverter.ToUInt32(request.Data, 0));
            var threadID     = Convert.ToInt32(i);
            var postMetaList = await bulletinBoardService.GetThreadDetailsAsync(threadID);

            responses.Add(request.CreateResponse(OpCodes.OPCODE_DATA_BBS_THREAD_LIST, BitConverter.GetBytes(swap32((uint)postMetaList.Count))));
            foreach (var meta in postMetaList)
            {
                var postMetaBytes = await bulletinBoardService.ConvertThreadDetailsToBytesAsync(meta);

                responses.Add(request.CreateResponse(OpCodes.OPCODE_DATA_BBS_ENTRY_POST_META, postMetaBytes));
            }
            return(responses);
        }
        public Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
        {
            uint            rankPlayerID = BitConverter.ToUInt32(request.Data, 0).Swap();
            ResponseContent response     = request.CreateResponse(0x7839, _rankingManagementService.GetRankingPlayerInfo(rankPlayerID));

            return(Task.FromResult <IEnumerable <ResponseContent> >(new [] { response }));
        }
        public Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
        {
            List <ResponseContent> responseList = new List <ResponseContent>();
            LobbyChatRoom          room;
            var currentLobbyIndex = (short)swap16(BitConverter.ToUInt16(request.Data, 0));
            var currentLobbyType  = swap16(BitConverter.ToUInt16(request.Data, 2));

            logger.Verbose("Lobby Room ID: {@room_index}", currentLobbyIndex);
            logger.Verbose("Lobby Type ID: {@lobbyType}", currentLobbyType);

            if (currentLobbyType == OpCodes.LOBBY_TYPE_GUILD) //Guild Room
            {
                //TODO add Guild Specific Code
                room = lobbyChatService.GetOrAddLobby((ushort)currentLobbyIndex, "Guild Room", OpCodes.LOBBY_TYPE_GUILD, out var _);
            }
            else
            {
                lobbyChatService.TryGetLobby((ushort)currentLobbyIndex, out room);
            }

            responseList.Add(request.CreateResponse(OpCodes.OPCODE_DATA_LOBBY_ENTERROOM_OK, BitConverter.GetBytes(swap16((ushort)room.Clients.Count))));
            responseList.AddRange(room.ClientJoinedLobbyPacketHandler(request.Client, request));
            logger.Information("Client #{0} has joined Lobby {1}. There are now {2} client(s) in the room", request.Client.ClientIndex, room.Name, room.Clients.Count);
            return(Task.FromResult <IEnumerable <ResponseContent> >(responseList));
        }
 public Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
 {
     return(Task.FromResult <IEnumerable <ResponseContent> >(new[]
     {
         request.CreateResponse(0x787a,
                                _guildManagementService.GetItemDonationSettings(request.Client.isGuildMaster))
     }));
 }
 public Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
 {
     return(Task.FromResult <IEnumerable <ResponseContent> >(new[]
     {
         request.CreateResponse(0x7713,
                                _guildManagementService.SetItemVisibilityAndPrice(request.Data))
     }));
 }
        public Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
        {
            List <ResponseContent> responseContents = new List <ResponseContent>();

            var           u = BitConverter.ToUInt16(request.Data, 0).Swap();
            List <byte[]> membersItemList = _guildManagementService.GetGuildItems(u, false);

            responseContents.Add(request.CreateResponse(0x7709,
                                                        BitConverter.GetBytes(((ushort)membersItemList.Count).Swap()))); // number of items

            foreach (var item in membersItemList)
            {
                responseContents.Add(request.CreateResponse(0x770a, item));
            }

            return(Task.FromResult <IEnumerable <ResponseContent> >(responseContents));
        }
Example #17
0
 public Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
 {
     return(Task.FromResult <IEnumerable <ResponseContent> >(new[]
     {
         request.CreateResponse(0x761D,
                                _guildManagementService.UpdateGuildEmblemComment(request.Data, request.Client._guildID))
     }));
 }
Example #18
0
        public Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
        {
            var u = guildManagementService.CreateGuild(request.Data, request.Client._characterPlayerID);

            request.Client._guildID      = u;
            request.Client.isGuildMaster = true;
            return(Task.FromResult <IEnumerable <ResponseContent> >(new[] { request.CreateResponse(0x7601, BitConverter.GetBytes(swap16(u))) }));
        }
 public Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
 {
     return(Task.FromResult <IEnumerable <ResponseContent> >(new[]
     {
         request.CreateResponse(0x7617,
                                _guildManagementService.LeaveGuild(request.Client._guildID, request.Client._characterPlayerID))
     }));
 }
Example #20
0
        public Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
        {
            List <ResponseContent> responseContents = new List <ResponseContent>();

            var u = BitConverter.ToUInt16(request.Data, 0).Swap();

            List <byte[]> allGuildItems = _guildManagementService.GetAllGuildItemsWithSettings(u);

            responseContents.Add(request.CreateResponse(0x7729,
                                                        BitConverter.GetBytes(((ushort)allGuildItems.Count).Swap()))); // number of items

            foreach (var item in allGuildItems)
            {
                responseContents.Add(request.CreateResponse(0x772A, item));
            }

            return(Task.FromResult <IEnumerable <ResponseContent> >(responseContents));
        }
        public Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
        {
            var responses = new List <ResponseContent>
            {
                request.CreateResponse(0x770D, guildManagementService.BuyItemFromGuild(request.Data))
            };

            return(Task.FromResult <IEnumerable <ResponseContent> >(responses));
        }
Example #22
0
        public async Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
        {
            var mailId           = (int)swap32(BitConverter.ToUInt32(request.Data, 4));
            var messageBodyModel = await mailService.GetMailContent(mailId);

            var messageBody = await mailService.ConvertMailBodyIntoBytes(messageBodyModel);

            return(new[] { request.CreateResponse(OpCodes.OPCODE_DATA_MAIL_GET_MAIL_BODY_RESPONSE, messageBody) });
        }
Example #23
0
        public async Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
        {
            var responses = new List <ResponseContent>();
            var ms        = new MemoryStream();
            await ms.WriteAsync(new byte[] { 0x76, 0xB0, 0x54, 0x45, 0x53, 0x54, 0x00 });

            if (request.Data[1] == 0x08) //accepted the invitation
            {
                DBAccess.getInstance().EnrollPlayerInGuild(request.Client.currentGuildInvitaionSelection, request.Client._characterPlayerID, false);
                responses.Add(request.CreateResponse(0x760A, ms.ToArray())); // send guild ID
            }
            else
            {
                // rejected
                responses.Add(request.CreateResponse(0x760A, ms.ToArray())); // send guild ID
            }
            return(responses);
        }
        public Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
        {
            request.Client._itemDontationID      = BitConverter.ToUInt32(request.Data, 2).Swap();
            request.Client._itemDonationQuantity = BitConverter.ToUInt16(request.Data, 6).Swap();

            return(Task.FromResult <IEnumerable <ResponseContent> >(new [] { request.CreateResponse(0x7704,
                                                                                                    _guildManagementService.GetPriceOfItemToBeDonated(request.Client._guildID,
                                                                                                                                                      request.Client._itemDontationID)) }));
        }
Example #25
0
        public Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
        {
            var responses = new List <ResponseContent>
            {
                request.CreateResponse(0x761A, guildManagementService.DestroyGuild(request.Client._guildID))
            };

            return(Task.FromResult <IEnumerable <ResponseContent> >(responses));
        }
        public Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
        {
            uint playerToKick = BitConverter.ToUInt32(request.Data, 0).Swap();

            return(Task.FromResult <IEnumerable <ResponseContent> >(new[]
            {
                request.CreateResponse(0x7865,
                                       _guildManagementService.KickPlayerFromGuild(request.Client._guildID, playerToKick))
            }));
        }
Example #27
0
        public Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
        {
            uint assigningPlayerID = BitConverter.ToUInt32(request.Data, 0).Swap();

            return(Task.FromResult <IEnumerable <ResponseContent> >(new[]
            {
                request.CreateResponse(0x788E,
                                       _guildManagementService.LeaveGuildAndAssignMaster(request.Client._guildID, assigningPlayerID))
            }));
        }
        public Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
        {
            var guildId = swap16(BitConverter.ToUInt16(request.Data, 0));

            return(Task.FromResult <IEnumerable <ResponseContent> >(
                       new[]
            {
                request.CreateResponse(OpCodes.OPCODE_DATA_GET_GUILD_INFO_RESPONSE, guildManagementService.GetGuildInfo(guildId))
            }));
        }
        public async Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
        {
            bool isNew = await Task.Run(() =>
                                        DBAccess.getInstance().checkForNewMailByAccountID(Extensions.ReadAccountId(request.Data, 0)));

            ResponseContent responseContent;

            if (isNew)
            {
                responseContent = request.CreateResponse(OpCodes.OPCODE_DATA_MAILCHECK_OK,
                                                         new byte[] { 0x00, 0x00, 0x01, 0x00 });
            }
            else
            {
                responseContent = request.CreateResponse(OpCodes.OPCODE_DATA_MAILCHECK_OK, new byte[] { 0x00, 0x01 });
            }

            return(new[] { responseContent });
        }
Example #30
0
        public Task <IEnumerable <ResponseContent> > HandleIncomingRequestAsync(RequestContent request)
        {
            var u = BitConverter.ToUInt16(request.Data, 0).Swap();

            request.Client.currentGuildInvitaionSelection = u;
            return(Task.FromResult <IEnumerable <ResponseContent> >(new[]
            {
                request.CreateResponse(0x772D,
                                       _guildManagementService.GetGuildInfo(u))
            }));
        }