176 lines
5.2 KiB
C#
176 lines
5.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace GameServer
|
|
{
|
|
/// <summary>
|
|
/// 房间
|
|
/// </summary>
|
|
public class Room
|
|
{
|
|
#region 静态
|
|
private static List<Room> rooms = new List<Room>();
|
|
//public static ulong counter = 1;
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// 房间ID
|
|
/// </summary>
|
|
public ulong roomId = 0;
|
|
/// <summary>
|
|
/// 房间名称
|
|
/// </summary>
|
|
public string roomname = "";
|
|
/// <summary>
|
|
/// 创建人
|
|
/// </summary>
|
|
public ulong creater = 0;
|
|
/// <summary>
|
|
/// 房间用户
|
|
/// </summary>
|
|
public List<User> users = new List<User>();
|
|
|
|
/// <summary>
|
|
/// 构造函数
|
|
/// </summary>
|
|
/// <param name="_roomname">房间名称</param>
|
|
/// <param name="_creater">创建人ID</param>
|
|
public Room(string _roomname, ulong _creater)
|
|
{
|
|
roomId = ulong.Parse(_roomname);
|
|
roomname = _roomname;
|
|
creater = _creater;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 创建房间
|
|
/// </summary>
|
|
/// <param name="_roomname">房间名称</param>
|
|
/// <param name="_creater">创建人ID</param>
|
|
/// <returns></returns>
|
|
public static Room Create(string _roomname, ulong _creater)
|
|
{
|
|
var room = new Room(_roomname, _creater);
|
|
rooms.Add(room);
|
|
return room;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取房间列表
|
|
/// </summary>
|
|
/// <param name="_creater">创建人</param>
|
|
/// <returns></returns>
|
|
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(';');
|
|
}
|
|
|
|
/// <summary>
|
|
/// 加入房间
|
|
/// </summary>
|
|
/// <param name="_user"></param>
|
|
/// <param name="_roomId"></param>
|
|
/// <returns></returns>
|
|
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 "";
|
|
}
|
|
|
|
/// <summary>
|
|
/// 批量加入房间
|
|
/// </summary>
|
|
/// <param name="_roomId"></param>
|
|
/// <returns></returns>
|
|
public static List<User> BatchJoinRoom(ulong _roomId)
|
|
{
|
|
var room = rooms.Find(r => r.roomId == _roomId);
|
|
List<User> 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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 离开房间
|
|
/// </summary>
|
|
/// <param name="_user">用户</param>
|
|
/// <returns></returns>
|
|
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 "";
|
|
}
|
|
|
|
/// <summary>
|
|
/// 关闭房间
|
|
/// </summary>
|
|
/// <param name="roomId">房间ID</param>
|
|
/// <returns></returns>
|
|
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 "";
|
|
}
|
|
}
|
|
} |