WRJServer/GameServer/Room.cs

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 "";
}
}
}