Repository navigation
Expand file tree
/
Copy pathRoom.cs
More file actions
138 lines (106 loc) · 3.34 KB
/
Copy pathRoom.cs
File metadata and controls
138 lines (106 loc) · 3.34 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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
using CSBaseLib;
using MemoryPack;
using System;
using System.Collections.Generic;
using System.Linq;
namespace ChatServer;
public class Room
{
public int Index { get; private set; }
public int Number { get; private set; }
int _maxUserCount = 0;
List<RoomUser> _userList = new List<RoomUser>();
public static Func<string, byte[], bool> NetSendFunc;
public void Init(int index, int number, int maxUserCount)
{
Index = index;
Number = number;
_maxUserCount = maxUserCount;
}
public bool AddUser(string userID, int netSessionIndex, string netSessionID)
{
if(GetUser(userID) != null)
{
return false;
}
var roomUser = new RoomUser();
roomUser.Set(userID, netSessionIndex, netSessionID);
_userList.Add(roomUser);
return true;
}
public void RemoveUser(int netSessionIndex)
{
var index = _userList.FindIndex(x => x.NetSessionIndex == netSessionIndex);
_userList.RemoveAt(index);
}
public bool RemoveUser(RoomUser user)
{
return _userList.Remove(user);
}
public RoomUser GetUser(string userID)
{
return _userList.Find(x => x.UserID == userID);
}
public RoomUser GetUser(int netSessionIndex)
{
return _userList.Find(x => x.NetSessionIndex == netSessionIndex);
}
public int CurrentUserCount()
{
return _userList.Count();
}
public void SendNotifyPacketUserList(string userNetSessionID)
{
var packet = new CSBaseLib.PKTNtfRoomUserList();
foreach (var user in _userList)
{
packet.UserIDList.Add(user.UserID);
}
var bodyData = MemoryPackSerializer.Serialize(packet);
var sendPacket = PacketToBytes.Make(PacketId.NtfRoomUserList, bodyData);
NetSendFunc(userNetSessionID, sendPacket);
}
public void SendNofifyPacketNewUser(int newUserNetSessionIndex, string newUserID)
{
var packet = new PKTNtfRoomNewUser();
packet.UserID = newUserID;
var bodyData = MemoryPackSerializer.Serialize(packet);
var sendPacket = PacketToBytes.Make(PacketId.NtfRoomNewUser, bodyData);
Broadcast(newUserNetSessionIndex, sendPacket);
}
public void SendNotifyPacketLeaveUser(string userID)
{
if(CurrentUserCount() == 0)
{
return;
}
var packet = new PKTNtfRoomLeaveUser();
packet.UserID = userID;
var bodyData = MemoryPackSerializer.Serialize(packet);
var sendPacket = PacketToBytes.Make(PacketId.NtfRoomLeaveUser, bodyData);
Broadcast(-1, sendPacket);
}
public void Broadcast(int excludeNetSessionIndex, byte[] sendPacket)
{
foreach(var user in _userList)
{
if(user.NetSessionIndex == excludeNetSessionIndex)
{
continue;
}
NetSendFunc(user.NetSessionID, sendPacket);
}
}
}
public class RoomUser
{
public string UserID { get; private set; }
public int NetSessionIndex { get; private set; }
public string NetSessionID { get; private set; }
public void Set(string userID, int netSessionIndex, string netSessionID)
{
UserID = userID;
NetSessionIndex = netSessionIndex;
NetSessionID = netSessionID;
}
}