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