-
Notifications
You must be signed in to change notification settings - Fork 83
Expand file tree
/
Copy pathEntryBoardItemKickHandler.cs
More file actions
57 lines (47 loc) · 2.28 KB
/
Copy pathEntryBoardItemKickHandler.cs
File metadata and controls
57 lines (47 loc) · 2.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
using Arrowgene.Ddon.GameServer.Characters;
using Arrowgene.Ddon.Server;
using Arrowgene.Ddon.Shared.Entity.PacketStructure;
using Arrowgene.Ddon.Shared.Entity.Structure;
using Arrowgene.Ddon.Shared.Model;
using Arrowgene.Logging;
using System.Diagnostics.Metrics;
using System.Linq;
namespace Arrowgene.Ddon.GameServer.Handler
{
public class EntryBoardItemKickHandler : GameRequestPacketHandler<C2SEntryBoardItemKickReq, S2CEntryBoardItemKickRes>
{
private static readonly ServerLogger Logger = LogProvider.Logger<ServerLogger>(typeof(EntryBoardItemKickHandler));
public EntryBoardItemKickHandler(DdonGameServer server) : base(server)
{
}
public override S2CEntryBoardItemKickRes Handle(GameClient client, C2SEntryBoardItemKickReq request)
{
var data = Server.BoardManager.RecreateGroup(client.Character);
var kickedMemberClient = Server.ClientLookup.GetClientByCharacterId(request.CharacterId);
CDataEntryMemberData memberData;
lock (data)
{
memberData = data.EntryItem.EntryMemberList.Where(x => x.CharacterListElement.CommunityCharacterBaseInfo.CharacterId == kickedMemberClient.Character.CharacterId).First();
memberData.EntryFlag = false;
memberData.CharacterListElement = new CDataCharacterListElement();
}
S2CEntryBoardEntryBoardItemChangeMemberNtc ntc = new S2CEntryBoardEntryBoardItemChangeMemberNtc()
{
EntryFlag = false,
MemberData = memberData,
};
foreach (var characterId in data.Members)
{
var memberClient = Server.ClientLookup.GetClientByCharacterId(characterId);
if (memberClient != null)
{
memberClient.Send(ntc);
}
}
kickedMemberClient.Send(new S2CEntryBoardEntryBoardItemLeaveNtc());
Server.BoardManager.RemoveCharacterFromGroup(kickedMemberClient.Character);
Server.CharacterManager.UpdateOnlineStatus(kickedMemberClient, kickedMemberClient.Character, CharacterManager.GetDefaultOnlineStatus(kickedMemberClient.Character));
return new S2CEntryBoardItemKickRes();
}
}
}