using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace GameServer { /// /// 房间 /// public class Room { #region 静态 private static List rooms = new List(); //public static ulong counter = 1; #endregion /// /// 房间ID /// public ulong roomId = 0; /// /// 房间名称 /// public string roomname = ""; /// /// 创建人 /// public ulong creater = 0; /// /// 房间用户 /// public List users = new List(); /// /// 构造函数 /// /// 房间名称 /// 创建人ID public Room(string _roomname, ulong _creater) { roomId = ulong.Parse(_roomname); roomname = _roomname; creater = _creater; } /// /// 创建房间 /// /// 房间名称 /// 创建人ID /// public static Room Create(string _roomname, ulong _creater) { var room = new Room(_roomname, _creater); rooms.Add(room); return room; } /// /// 获取房间列表 /// /// 创建人 /// public static string GetRooms(ulong _creater = 0) { StringBuilder sb = new StringBuilder(); rooms.ForEach(r => { if (_creater == 0) sb.AppendFormat("{0},{1},{2};", r.roomId, r.roomname, r.creater); else { if (r.creater == _creater) sb.AppendFormat("{0},{1},{2};", r.roomId, r.roomname, r.creater); } }); return sb.ToString().Trim(';'); } /// /// 加入房间 /// /// /// /// public static string JoinRoom(User _user, ulong _roomId) { var room = rooms.Find(r => r.roomId == _roomId); if (_user.roomId == 0) { if (room != null && !room.users.Contains(_user)) { room.users.Add(_user); _user.roomId = _roomId; return string.Format("{0},{1},{2}", room.roomId, room.roomname, room.creater); } } return ""; } /// /// 批量加入房间 /// /// /// public static List BatchJoinRoom(ulong _roomId) { var room = rooms.Find(r => r.roomId == _roomId); List users = User.GetAllUsers(); if (room != null) { for (int i = 0; i < users.Count; i++) { int index = i; if (users[index].roomId == 0) { if (!room.users.Contains(users[index])) { room.users.Add(users[index]); users[index].roomId = _roomId; } } } return users; } return users; } /// /// 离开房间 /// /// 用户 /// public static string LeaveRoom(User _user) { if (_user != null) { var room = rooms.Find(r => r.roomId == _user.roomId); if (room != null) { room.users.Remove(_user); _user.roomId = 0; return string.Format("{0},{1},{2},{3}", room.roomId, room.roomname, room.creater,_user.userId); } } return ""; } /// /// 关闭房间 /// /// 房间ID /// public static string CloseRoom(ulong _roomId) { var room = rooms.Find(r => r.roomId == _roomId); if (room != null) { room.users.ForEach(u => { //通知退出 u.Write(string.Format("roomclosed {0}", room.roomId)); u.roomId = 0; }); room.users.Clear(); rooms.Remove(room); //关闭房间通知 return string.Format("{0}", room.roomId); } return ""; } } }