public override async UniTask <List <SocialCharacterData> > ReadFriends(string id1) { List <SocialCharacterData> result = new List <SocialCharacterData>(); List <string> characterIds = new List <string>(); await ExecuteReader((reader) => { while (reader.Read()) { characterIds.Add(reader.GetString(0)); } }, "SELECT characterId2 FROM friend WHERE characterId1=@id1", new MySqlParameter("@id1", id1)); SocialCharacterData socialCharacterData; foreach (string characterId in characterIds) { await ExecuteReader((reader) => { while (reader.Read()) { // Get some required data, other data will be set at server side socialCharacterData = new SocialCharacterData(); socialCharacterData.id = reader.GetString(0); socialCharacterData.dataId = reader.GetInt32(1); socialCharacterData.characterName = reader.GetString(2); socialCharacterData.level = reader.GetInt16(3); result.Add(socialCharacterData); } }, "SELECT id, dataId, characterName, level FROM characters WHERE BINARY id = @id", new MySqlParameter("@id", characterId)); } return(result); }
public async UniTaskVoid HandleRequestAcceptGuildInvitation(RequestHandlerData requestHandler, RequestAcceptGuildInvitationMessage request, RequestProceedResultDelegate <ResponseAcceptGuildInvitationMessage> result) { #if UNITY_STANDALONE && !CLIENT_BUILD await UniTask.Yield(); BasePlayerCharacterEntity playerCharacter; if (!GameInstance.ServerUserHandlers.TryGetPlayerCharacter(requestHandler.ConnectionId, out playerCharacter)) { result.InvokeError(new ResponseAcceptGuildInvitationMessage() { message = UITextKeys.UI_ERROR_NOT_LOGGED_IN, }); return; } ValidateGuildRequestResult validateResult = GameInstance.ServerGuildHandlers.CanAcceptGuildInvitation(request.guildId, playerCharacter); if (!validateResult.IsSuccess) { result.InvokeError(new ResponseAcceptGuildInvitationMessage() { message = validateResult.GameMessage, }); return; } playerCharacter.GuildId = request.guildId; validateResult.Guild.AddMember(playerCharacter); GameInstance.ServerGuildHandlers.SetGuild(request.guildId, validateResult.Guild); GameInstance.ServerGuildHandlers.RemoveGuildInvitation(request.guildId, playerCharacter.Id); // Save to database AsyncResponseData <GuildResp> updateResp = await DbServiceClient.UpdateCharacterGuildAsync(new UpdateCharacterGuildReq() { SocialCharacterData = SocialCharacterData.Create(playerCharacter), GuildId = request.guildId, GuildRole = validateResult.Guild.GetMemberRole(playerCharacter.Id) }); if (!updateResp.IsSuccess) { result.InvokeError(new ResponseAcceptGuildInvitationMessage() { message = UITextKeys.UI_ERROR_INTERNAL_SERVER_ERROR, }); return; } // Broadcast via chat server if (ClusterClient.IsNetworkActive) { ClusterClient.SendAddSocialMember(MMOMessageTypes.UpdateGuildMember, request.guildId, playerCharacter.Id, playerCharacter.CharacterName, playerCharacter.DataId, playerCharacter.Level); } GameInstance.ServerGameMessageHandlers.SendSetGuildData(requestHandler.ConnectionId, validateResult.Guild); GameInstance.ServerGameMessageHandlers.SendAddGuildMembersToOne(requestHandler.ConnectionId, validateResult.Guild); GameInstance.ServerGameMessageHandlers.SendAddGuildMemberToMembers(validateResult.Guild, playerCharacter.Id, playerCharacter.CharacterName, playerCharacter.DataId, playerCharacter.Level); // Send message to inviter GameInstance.ServerGameMessageHandlers.SendGameMessageByCharacterId(request.inviterId, UITextKeys.UI_GUILD_INVITATION_ACCEPTED); // Response to invitee result.InvokeSuccess(new ResponseAcceptGuildInvitationMessage() { message = UITextKeys.UI_GUILD_INVITATION_ACCEPTED, }); #endif }
public override PartyData ReadParty(int id) { PartyData result = null; ExecuteReader((reader) => { if (reader.Read()) { result = new PartyData(id, reader.GetBoolean(0), reader.GetBoolean(1), reader.GetString(2)); } }, "SELECT shareExp, shareItem, leaderId FROM party WHERE id=@id LIMIT 1", new SqliteParameter("@id", id)); if (result != null) { ExecuteReader((reader) => { SocialCharacterData partyMemberData; while (reader.Read()) { // Get some required data, other data will be set at server side partyMemberData = new SocialCharacterData(); partyMemberData.id = reader.GetString(0); partyMemberData.dataId = reader.GetInt32(1); partyMemberData.characterName = reader.GetString(2); partyMemberData.level = reader.GetInt16(3); result.AddMember(partyMemberData); } }, "SELECT id, dataId, characterName, level FROM characters WHERE partyId=@id", new SqliteParameter("@id", id)); } return(result); }
public override PartyData ReadParty(int id) { PartyData result = null; var reader = ExecuteReader("SELECT * FROM party WHERE id=@id LIMIT 1", new MySqlParameter("@id", id)); if (reader.Read()) { result = new PartyData(id, reader.GetBoolean("shareExp"), reader.GetBoolean("shareItem"), reader.GetString("leaderId")); reader = ExecuteReader("SELECT id, dataId, characterName, level FROM characters WHERE partyId=@id", new MySqlParameter("@id", id)); SocialCharacterData partyMemberData; while (reader.Read()) { // Get some required data, other data will be set at server side partyMemberData = new SocialCharacterData(); partyMemberData.id = reader.GetString("id"); partyMemberData.characterName = reader.GetString("characterName"); partyMemberData.dataId = reader.GetInt32("dataId"); partyMemberData.level = reader.GetInt16("level"); result.AddMember(partyMemberData); } } return(result); }
public override void RegisterPlayerCharacter(long connectionId, BasePlayerCharacterEntity playerCharacterEntity) { // Set user data to map server if (!usersById.ContainsKey(playerCharacterEntity.Id)) { SocialCharacterData userData = new SocialCharacterData(); userData.userId = playerCharacterEntity.UserId; userData.id = playerCharacterEntity.Id; userData.characterName = playerCharacterEntity.CharacterName; userData.dataId = playerCharacterEntity.DataId; userData.level = playerCharacterEntity.Level; userData.currentHp = playerCharacterEntity.CurrentHp; userData.maxHp = playerCharacterEntity.MaxHp; userData.currentMp = playerCharacterEntity.CurrentMp; userData.maxMp = playerCharacterEntity.MaxMp; usersById.TryAdd(userData.id, userData); // Add map user to central server and chat server UpdateMapUser(CentralAppServerRegister, UpdateUserCharacterMessage.UpdateType.Add, userData); if (ChatNetworkManager.IsClientConnected) { UpdateMapUser(ChatNetworkManager.Client, UpdateUserCharacterMessage.UpdateType.Add, userData); } } base.RegisterPlayerCharacter(connectionId, playerCharacterEntity); }
public override List <SocialCharacterData> FindCharacters(string finderId, string characterName, int skip, int limit) { string excludeIdsQuery = "(id!='" + finderId + "'"; // Exclude friend, requested characters ExecuteReader((reader) => { while (reader.Read()) { excludeIdsQuery += " AND id!='" + reader.GetString(0) + "'"; } }, "SELECT characterId2 FROM friend WHERE characterId1='" + finderId + "'"); excludeIdsQuery += ")"; List <SocialCharacterData> result = new List <SocialCharacterData>(); ExecuteReader((reader) => { SocialCharacterData socialCharacterData; while (reader.Read()) { // Get some required data, other data will be set at server side socialCharacterData = new SocialCharacterData(); socialCharacterData.id = reader.GetString(0); socialCharacterData.dataId = reader.GetInt32(1); socialCharacterData.characterName = reader.GetString(2); socialCharacterData.level = reader.GetInt16(3); result.Add(socialCharacterData); } }, "SELECT id, dataId, characterName, level FROM characters WHERE characterName LIKE @characterName AND " + excludeIdsQuery + " LIMIT " + skip + ", " + limit, new SqliteParameter("@characterName", "%" + characterName + "%")); return(result); }
public override List <SocialCharacterData> ReadFriends(string id1) { List <SocialCharacterData> result = new List <SocialCharacterData>(); SQLiteRowsReader reader = ExecuteReader("SELECT characterId2 FROM friend WHERE characterId1=@id1", new SqliteParameter("@id1", id1)); string characterId; SocialCharacterData socialCharacterData; SQLiteRowsReader reader2; while (reader.Read()) { characterId = reader.GetString("characterId2"); reader2 = ExecuteReader("SELECT id, dataId, characterName, level FROM characters WHERE id LIKE @id", new SqliteParameter("@id", characterId)); while (reader2.Read()) { // Get some required data, other data will be set at server side socialCharacterData = new SocialCharacterData(); socialCharacterData.id = reader2.GetString("id"); socialCharacterData.characterName = reader2.GetString("characterName"); socialCharacterData.dataId = reader2.GetInt32("dataId"); socialCharacterData.level = reader2.GetInt16("level"); result.Add(socialCharacterData); } } return(result); }
public override GuildData ReadGuild(int id, GuildRoleData[] defaultGuildRoles) { GuildData result = null; MySQLRowsReader reader = ExecuteReader("SELECT * FROM guild WHERE id=@id LIMIT 1", new MySqlParameter("@id", id)); if (reader.Read()) { result = new GuildData(id, reader.GetString("guildName"), reader.GetString("leaderId"), defaultGuildRoles); result.level = reader.GetInt16("level"); result.exp = reader.GetInt32("exp"); result.skillPoint = reader.GetInt16("skillPoint"); result.guildMessage = reader.GetString("guildMessage"); result.gold = reader.GetInt32("gold"); reader = ExecuteReader("SELECT * FROM guildrole WHERE guildId=@id", new MySqlParameter("@id", id)); byte guildRole; GuildRoleData guildRoleData; while (reader.Read()) { guildRole = reader.GetByte("guildRole"); guildRoleData = new GuildRoleData(); guildRoleData.roleName = reader.GetString("name"); guildRoleData.canInvite = reader.GetBoolean("canInvite"); guildRoleData.canKick = reader.GetBoolean("canKick"); guildRoleData.shareExpPercentage = reader.GetByte("shareExpPercentage"); result.SetRole(guildRole, guildRoleData); } reader = ExecuteReader("SELECT id, dataId, characterName, level, guildRole FROM characters WHERE guildId=@id", new MySqlParameter("@id", id)); SocialCharacterData guildMemberData; while (reader.Read()) { // Get some required data, other data will be set at server side guildMemberData = new SocialCharacterData(); guildMemberData.id = reader.GetString("id"); guildMemberData.characterName = reader.GetString("characterName"); guildMemberData.dataId = reader.GetInt32("dataId"); guildMemberData.level = reader.GetInt16("level"); result.AddMember(guildMemberData, reader.GetByte("guildRole")); } reader = ExecuteReader("SELECT dataId, level FROM guildskill WHERE guildId=@id", new MySqlParameter("@id", id)); while (reader.Read()) { result.SetSkillLevel(reader.GetInt32("dataId"), reader.GetInt16("level")); } } return(result); }
private void UpdateMapUser(UpdateUserCharacterMessage.UpdateType updateType, SocialCharacterData userData, long exceptConnectionId) { foreach (long mapServerConnectionId in mapServerConnectionIds) { if (mapServerConnectionId == exceptConnectionId) { continue; } UpdateMapUser(mapServerConnectionId, updateType, userData); } }
public SocialCharacterData ToSocialCharacterData() { var result = new SocialCharacterData(); result.id = id; result.characterName = characterName; result.dataId = dataId; result.level = level; result.currentHp = currentHp; result.maxHp = maxHp; result.currentMp = currentMp; result.maxMp = maxMp; return(result); }
public async UniTaskVoid HandleRequestAcceptGuildInvitation(RequestHandlerData requestHandler, RequestAcceptGuildInvitationMessage request, RequestProceedResultDelegate <ResponseAcceptGuildInvitationMessage> result) { #if UNITY_STANDALONE && !CLIENT_BUILD await UniTask.Yield(); BasePlayerCharacterEntity playerCharacter; if (!GameInstance.ServerUserHandlers.TryGetPlayerCharacter(requestHandler.ConnectionId, out playerCharacter)) { result.Invoke(AckResponseCode.Error, new ResponseAcceptGuildInvitationMessage() { message = UITextKeys.UI_ERROR_NOT_LOGGED_IN, }); return; } ValidateGuildRequestResult validateResult = GameInstance.ServerGuildHandlers.CanAcceptGuildInvitation(request.guildId, playerCharacter); if (!validateResult.IsSuccess) { result.Invoke(AckResponseCode.Error, new ResponseAcceptGuildInvitationMessage() { message = validateResult.GameMessage, }); return; } playerCharacter.GuildId = request.guildId; validateResult.Guild.AddMember(playerCharacter); GameInstance.ServerGuildHandlers.SetGuild(request.guildId, validateResult.Guild); GameInstance.ServerGuildHandlers.RemoveGuildInvitation(request.guildId, playerCharacter.Id); // Save to database _ = DbServiceClient.UpdateCharacterGuildAsync(new UpdateCharacterGuildReq() { SocialCharacterData = DatabaseServiceUtils.ToByteString(SocialCharacterData.Create(playerCharacter)), GuildId = request.guildId, GuildRole = validateResult.Guild.GetMemberRole(playerCharacter.Id) }); // Broadcast via chat server if (ChatNetworkManager.IsClientConnected) { ChatNetworkManager.SendAddSocialMember(null, MMOMessageTypes.UpdateGuildMember, request.guildId, playerCharacter.Id, playerCharacter.CharacterName, playerCharacter.DataId, playerCharacter.Level); } GameInstance.ServerGameMessageHandlers.SendSetGuildData(requestHandler.ConnectionId, validateResult.Guild); GameInstance.ServerGameMessageHandlers.SendAddGuildMembersToOne(requestHandler.ConnectionId, validateResult.Guild); GameInstance.ServerGameMessageHandlers.SendAddGuildMembersToMembers(validateResult.Guild, playerCharacter.Id, playerCharacter.CharacterName, playerCharacter.DataId, playerCharacter.Level); result.Invoke(AckResponseCode.Success, new ResponseAcceptGuildInvitationMessage() { message = UITextKeys.UI_GUILD_INVITATION_ACCEPTED, }); #endif }
public override List <SocialCharacterData> ReadFriends(string id, bool readById2, byte state, int skip, int limit) { List <SocialCharacterData> result = new List <SocialCharacterData>(); List <string> characterIds = new List <string>(); if (readById2) { ExecuteReader((reader) => { while (reader.Read()) { characterIds.Add(reader.GetString(0)); } }, "SELECT characterId1 FROM friend WHERE characterId2=@id AND state=" + state + " LIMIT " + skip + ", " + limit, new SqliteParameter("@id", id)); } else { ExecuteReader((reader) => { while (reader.Read()) { characterIds.Add(reader.GetString(0)); } }, "SELECT characterId2 FROM friend WHERE characterId1=@id AND state=" + state + " LIMIT " + skip + ", " + limit, new SqliteParameter("@id", id)); } SocialCharacterData socialCharacterData; foreach (string characterId in characterIds) { ExecuteReader((reader) => { while (reader.Read()) { // Get some required data, other data will be set at server side socialCharacterData = new SocialCharacterData(); socialCharacterData.id = reader.GetString(0); socialCharacterData.dataId = reader.GetInt32(1); socialCharacterData.characterName = reader.GetString(2); socialCharacterData.level = reader.GetInt16(3); result.Add(socialCharacterData); } }, "SELECT id, dataId, characterName, level FROM characters WHERE id LIKE @id", new SqliteParameter("@id", characterId)); } return(result); }
private IEnumerator FindCharactersRoutine(BasePlayerCharacterEntity playerCharacterEntity, string characterName) { FindCharactersJob job = new FindCharactersJob(Database, characterName); job.Start(); yield return(StartCoroutine(job.WaitFor())); SocialCharacterData[] characters = new SocialCharacterData[job.result.Count]; SocialCharacterData tempCharacter; for (int i = 0; i < job.result.Count; ++i) { tempCharacter = job.result[i]; characters[i] = tempCharacter; } SendUpdateFoundCharactersToClient(playerCharacterEntity.ConnectionId, characters); }
public override List <SocialCharacterData> FindCharacters(string characterName) { List <SocialCharacterData> result = new List <SocialCharacterData>(); SQLiteRowsReader reader = ExecuteReader("SELECT id, dataId, characterName, level FROM characters WHERE characterName LIKE @characterName LIMIT 0, 20", new SqliteParameter("@characterName", "%" + characterName + "%")); SocialCharacterData socialCharacterData; while (reader.Read()) { // Get some required data, other data will be set at server side socialCharacterData = new SocialCharacterData(); socialCharacterData.id = reader.GetString("id"); socialCharacterData.characterName = reader.GetString("characterName"); socialCharacterData.dataId = reader.GetInt32("dataId"); socialCharacterData.level = reader.GetInt16("level"); result.Add(socialCharacterData); } return(result); }
public override async UniTask <List <SocialCharacterData> > FindCharacters(string characterName) { List <SocialCharacterData> result = new List <SocialCharacterData>(); await ExecuteReader((reader) => { SocialCharacterData socialCharacterData; while (reader.Read()) { // Get some required data, other data will be set at server side socialCharacterData = new SocialCharacterData(); socialCharacterData.id = reader.GetString(0); socialCharacterData.dataId = reader.GetInt32(1); socialCharacterData.characterName = reader.GetString(2); socialCharacterData.level = reader.GetInt16(3); result.Add(socialCharacterData); } }, "SELECT id, dataId, characterName, level FROM characters WHERE characterName LIKE @characterName LIMIT 0, 20", new MySqlParameter("@characterName", "%" + characterName + "%")); return(result); }
public void Deserialize(NetDataReader reader) { GuildId = reader.GetInt(); GuildRole = reader.GetByte(); SocialCharacterData = reader.GetValue <SocialCharacterData>(); }
private void UpdateMapUser(LiteNetLibClient transportHandler, UpdateUserCharacterMessage.UpdateType updateType, SocialCharacterData userData) { #if UNITY_STANDALONE && !CLIENT_BUILD UpdateUserCharacterMessage updateMapUserMessage = new UpdateUserCharacterMessage(); updateMapUserMessage.type = updateType; updateMapUserMessage.data = userData; transportHandler.SendPacket(0, DeliveryMethod.ReliableOrdered, MMOMessageTypes.UpdateMapUser, updateMapUserMessage.Serialize); #endif }
public void Deserialize(NetDataReader reader) { PartyId = reader.GetInt(); SocialCharacterData = reader.GetValue <SocialCharacterData>(); }
private void UpdateMapUser(long connectionId, UpdateUserCharacterMessage.UpdateType updateType, SocialCharacterData userData) { UpdateUserCharacterMessage message = new UpdateUserCharacterMessage(); message.type = updateType; message.character = userData; SendPacket(connectionId, 0, DeliveryMethod.ReliableOrdered, MMOMessageTypes.UpdateMapUser, (writer) => writer.PutValue(message)); }
public override GuildData ReadGuild(int id, GuildRoleData[] defaultGuildRoles) { GuildData result = null; ExecuteReader((reader) => { if (reader.Read()) { result = new GuildData(id, reader.GetString(0), reader.GetString(1), defaultGuildRoles); result.level = reader.GetInt16(2); result.exp = reader.GetInt32(3); result.skillPoint = reader.GetInt16(4); result.guildMessage = reader.GetString(5); result.guildMessage2 = reader.GetString(6); result.gold = reader.GetInt32(7); result.score = reader.GetInt32(8); result.options = reader.GetString(9); result.autoAcceptRequests = reader.GetBoolean(10); result.rank = reader.GetInt32(11); } }, "SELECT `guildName`, `leaderId`, `level`, `exp`, `skillPoint`, `guildMessage`, `guildMessage2`, `gold`, `score`, `options`, `autoAcceptRequests`, `rank` FROM guild WHERE id=@id LIMIT 1", new SqliteParameter("@id", id)); if (result != null) { // Guild roles ExecuteReader((reader) => { byte guildRole; GuildRoleData guildRoleData; while (reader.Read()) { guildRole = reader.GetByte(0); guildRoleData = new GuildRoleData(); guildRoleData.roleName = reader.GetString(1); guildRoleData.canInvite = reader.GetBoolean(2); guildRoleData.canKick = reader.GetBoolean(3); guildRoleData.shareExpPercentage = reader.GetByte(4); result.SetRole(guildRole, guildRoleData); } }, "SELECT guildRole, name, canInvite, canKick, shareExpPercentage FROM guildrole WHERE guildId=@id", new SqliteParameter("@id", id)); // Guild members ExecuteReader((reader) => { SocialCharacterData guildMemberData; while (reader.Read()) { // Get some required data, other data will be set at server side guildMemberData = new SocialCharacterData(); guildMemberData.id = reader.GetString(0); guildMemberData.dataId = reader.GetInt32(1); guildMemberData.characterName = reader.GetString(2); guildMemberData.level = reader.GetInt16(3); result.AddMember(guildMemberData, reader.GetByte(4)); } }, "SELECT id, dataId, characterName, level, guildRole FROM characters WHERE guildId=@id", new SqliteParameter("@id", id)); // Guild skills ExecuteReader((reader) => { while (reader.Read()) { result.SetSkillLevel(reader.GetInt32(0), reader.GetInt16(1)); } }, "SELECT dataId, level FROM guildskill WHERE guildId=@id", new SqliteParameter("@id", id)); } return(result); }
public override async UniTask <GuildData> ReadGuild(int id, GuildRoleData[] defaultGuildRoles) { GuildData result = null; await ExecuteReader((reader) => { if (reader.Read()) { result = new GuildData(id, reader.GetString(0), reader.GetString(1), defaultGuildRoles); result.level = reader.GetInt16(2); result.exp = reader.GetInt32(3); result.skillPoint = reader.GetInt16(4); result.guildMessage = reader.GetString(5); result.gold = reader.GetInt32(6); } }, "SELECT guildName, leaderId, level, exp, skillPoint, guildMessage, gold FROM guild WHERE id=@id LIMIT 1", new MySqlParameter("@id", id)); // Read relates data if guild exists if (result != null) { // Guild roles await ExecuteReader((reader) => { byte guildRole; GuildRoleData guildRoleData; while (reader.Read()) { guildRole = reader.GetByte(0); guildRoleData = new GuildRoleData(); guildRoleData.roleName = reader.GetString(1); guildRoleData.canInvite = reader.GetBoolean(2); guildRoleData.canKick = reader.GetBoolean(3); guildRoleData.shareExpPercentage = reader.GetByte(4); result.SetRole(guildRole, guildRoleData); } }, "SELECT guildRole, name, canInvite, canKick, shareExpPercentage FROM guildrole WHERE guildId=@id", new MySqlParameter("@id", id)); // Guild members await ExecuteReader((reader) => { SocialCharacterData guildMemberData; while (reader.Read()) { // Get some required data, other data will be set at server side guildMemberData = new SocialCharacterData(); guildMemberData.id = reader.GetString(0); guildMemberData.dataId = reader.GetInt32(1); guildMemberData.characterName = reader.GetString(2); guildMemberData.level = reader.GetInt16(3); result.AddMember(guildMemberData, reader.GetByte(4)); } }, "SELECT id, dataId, characterName, level, guildRole FROM characters WHERE guildId=@id", new MySqlParameter("@id", id)); // Guild skills await ExecuteReader((reader) => { while (reader.Read()) { result.SetSkillLevel(reader.GetInt32(0), reader.GetInt16(1)); } }, "SELECT dataId, level FROM guildskill WHERE guildId=@id", new MySqlParameter("@id", id)); } return(result); }
private void UpdateMapUser(long connectionId, UpdateUserCharacterMessage.UpdateType updateType, SocialCharacterData userData) { UpdateUserCharacterMessage updateMapUserMessage = new UpdateUserCharacterMessage(); updateMapUserMessage.type = updateType; updateMapUserMessage.data = userData; ServerSendPacket(connectionId, DeliveryMethod.ReliableOrdered, MMOMessageTypes.UpdateMapUser, updateMapUserMessage); }