초기커밋
This commit is contained in:
97
GameServer/Entity/Player/Manager/PlayerManager.cs
Normal file
97
GameServer/Entity/Player/Manager/PlayerManager.cs
Normal file
@@ -0,0 +1,97 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
|
||||
using ServerCore; using ServerBase;
|
||||
using ServerCommon;
|
||||
|
||||
|
||||
using SESSION_ID = System.Int32;
|
||||
using WORLD_META_ID = System.UInt32;
|
||||
using META_ID = System.UInt32;
|
||||
using ENTITY_GUID = System.String;
|
||||
using ACCOUNT_ID = System.String;
|
||||
using OWNER_GUID = System.String;
|
||||
using USER_GUID = System.String;
|
||||
using NICKNAME = System.String;
|
||||
using CHARACTER_GUID = System.String;
|
||||
using ITEM_GUID = System.String;
|
||||
|
||||
|
||||
namespace GameServer
|
||||
{
|
||||
public class PlayerManager : UserManagerBase<USER_GUID, NICKNAME, Player>
|
||||
{
|
||||
public PlayerManager() { }
|
||||
|
||||
public async Task logoutUserAllByKick()
|
||||
{
|
||||
var users = getUsers().Values.ToList();
|
||||
|
||||
foreach (var user in users)
|
||||
{
|
||||
await kickUserByUserGuid(user.getUserGuid(), LogoutReasonType.ExitToService);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<bool> kickUserByNickname(string name)
|
||||
{
|
||||
await Task.CompletedTask;
|
||||
|
||||
if (false == tryGetUserBySubKey(name, out var found_user))
|
||||
{
|
||||
var err_msg = $"Already dicsonnected User !!! : nickname:{name}";
|
||||
Log.getLogger().warn(err_msg);
|
||||
return false;
|
||||
}
|
||||
ArgumentNullException.ThrowIfNull(found_user);
|
||||
|
||||
await kickUser(found_user);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public async Task<bool> kickUserByUserGuid(USER_GUID userGuid, LogoutReasonType reason = LogoutReasonType.DuplicatedLogin, string reasonDescription = "")
|
||||
{
|
||||
await Task.CompletedTask;
|
||||
|
||||
if (false == tryGetUserByPrimaryKey(userGuid, out var found_user))
|
||||
{
|
||||
var err_msg = $"Already dicsonnected User !!! : userGuid:{userGuid}";
|
||||
Log.getLogger().warn(err_msg);
|
||||
return false;
|
||||
}
|
||||
ArgumentNullException.ThrowIfNull(found_user);
|
||||
|
||||
await kickUser(found_user, reason, reasonDescription);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private async Task kickUser(Player toKickUser, LogoutReasonType reason = LogoutReasonType.DuplicatedLogin, string reasonDescription = "")
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(toKickUser);
|
||||
|
||||
sendLogoutNoti(toKickUser, reason, reasonDescription);
|
||||
|
||||
var game_logout_action = toKickUser.getEntityAction<GameLogoutAction>();
|
||||
ArgumentNullException.ThrowIfNull(game_logout_action);
|
||||
|
||||
await game_logout_action.logoutUser();
|
||||
}
|
||||
|
||||
public void sendLogoutNoti(Player player, LogoutReasonType reason, string reasonDescription)
|
||||
{
|
||||
ClientToGame gs2cMessage = new ClientToGame();
|
||||
gs2cMessage.Message = new ClientToGameMessage();
|
||||
gs2cMessage.Message.NtfLogout = new ClientToGameMessage.Types.GS2C_NTF_LOGOUT();
|
||||
gs2cMessage.Message.NtfLogout.LogoutReason = reason;
|
||||
gs2cMessage.Message.NtfLogout.ReasonMessage = reasonDescription;
|
||||
|
||||
player.sendPacket(gs2cMessage);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user