public void Run(ServerCommandArgs args) { var receivedContent = Serializer.Deserialize <MessageContent>(args.Message); if (string.IsNullOrEmpty(receivedContent.RoomName)) { throw new ArgumentException("RoomName"); } if (receivedContent.Users == null) { throw new ArgumentNullException("Users"); } if (string.Equals(receivedContent.RoomName, ServerModel.MainRoomName)) { ServerModel.API.SendSystemMessage(args.ConnectionId, "Невозможно удалить пользователей из основной комнаты."); return; } if (!RoomExists(receivedContent.RoomName, args.ConnectionId)) { return; } using (var server = ServerModel.Get()) { Room room = server.Rooms[receivedContent.RoomName]; if (!room.Admin.Equals(args.ConnectionId)) { ServerModel.API.SendSystemMessage(args.ConnectionId, "Вы не являетесь администратором комнаты. Операция отменена."); return; } var sendingContent = new ClientRoomClosedCommand.MessageContent { Room = room }; foreach (var user in receivedContent.Users) { if (!room.Users.Contains(user.Nick)) { continue; } if (user.Equals(room.Admin)) { ServerModel.API.SendSystemMessage(args.ConnectionId, "Невозможно удалить из комнаты администратора."); continue; } room.RemoveUser(user.Nick); ServerModel.Server.SendMessage(user.Nick, ClientRoomClosedCommand.Id, sendingContent); } RefreshRoom(server, room); } }
protected override void OnRun(MessageContent content, ServerCommandArgs args) { if (string.IsNullOrEmpty(content.RoomName)) { throw new ArgumentException("RoomName"); } if (content.Users == null) { throw new ArgumentNullException("Users"); } if (string.Equals(content.RoomName, ServerModel.MainRoomName)) { ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied); return; } if (!RoomExists(content.RoomName, args.ConnectionId)) { return; } using (var server = ServerModel.Get()) { var room = server.Rooms[content.RoomName]; if (!room.Admin.Equals(args.ConnectionId)) { ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied); return; } var sendingContent = new ClientRoomClosedCommand.MessageContent { Room = room }; foreach (var user in content.Users) { if (!room.ContainsUser(user.Nick)) { continue; } if (user.Equals(room.Admin)) { ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied); continue; } room.RemoveUser(user.Nick); ServerModel.Server.SendMessage(user.Nick, ClientRoomClosedCommand.CommandId, sendingContent); } RefreshRoom(server, room); } }
protected override void OnRun(MessageContent content, CommandArgs args) { if (string.IsNullOrEmpty(content.RoomName)) { throw new ArgumentException("content.RoomName"); } if (content.Users == null) { throw new ArgumentNullException("content.Users"); } if (content.RoomName == ServerChat.MainRoomName) { ServerModel.Api.Perform(new ServerSendSystemMessageAction(args.ConnectionId, SystemMessageId.RoomAccessDenied)); return; } using (var server = ServerModel.Get()) { Room room; if (!TryGetRoom(server.Chat, content.RoomName, args.ConnectionId, out room)) { return; } if (room.Admin != args.ConnectionId) { ServerModel.Api.Perform(new ServerSendSystemMessageAction(args.ConnectionId, SystemMessageId.RoomAccessDenied)); return; } var sendingContent = new ClientRoomClosedCommand.MessageContent { RoomName = room.Name }; foreach (var userNick in content.Users) { if (!room.IsUserExist(userNick)) { continue; } if (userNick == room.Admin) { ServerModel.Api.Perform(new ServerSendSystemMessageAction(args.ConnectionId, SystemMessageId.RoomAccessDenied)); continue; } room.RemoveUser(userNick); ServerModel.Server.SendMessage(userNick, ClientRoomClosedCommand.CommandId, sendingContent); } RefreshRoom(server.Chat, room); } }
protected override void OnRun(MessageContent content, CommandArgs args) { if (string.IsNullOrEmpty(content.RoomName)) { throw new ArgumentException("content.RoomName"); } if (content.RoomName == ServerChat.MainRoomName) { ServerModel.Api.Perform(new ServerSendSystemMessageAction(args.ConnectionId, SystemMessageId.RoomCantLeaveMainRoom)); return; } using (var server = ServerModel.Get()) { Room room; if (!TryGetRoom(server.Chat, content.RoomName, args.ConnectionId, out room)) { return; } if (!room.IsUserExist(args.ConnectionId)) { ServerModel.Api.Perform(new ServerSendSystemMessageAction(args.ConnectionId, SystemMessageId.RoomAccessDenied)); return; } var closeRoomContent = new ClientRoomClosedCommand.MessageContent { RoomName = room.Name }; ServerModel.Server.SendMessage(args.ConnectionId, ClientRoomClosedCommand.CommandId, closeRoomContent); room.RemoveUser(args.ConnectionId); if (room.IsEmpty) { server.Chat.RemoveRoom(room.Name); } else { if (room.Admin == args.ConnectionId) { room.Admin = room.Users.FirstOrDefault(); if (room.Admin != null) { ServerModel.Api.Perform(new ServerSendSystemMessageAction(room.Admin, SystemMessageId.RoomAdminChanged, room.Name)); } } RefreshRoom(server.Chat, room); } } }
public void Run(ServerCommandArgs args) { var receivedContent = Serializer.Deserialize <MessageContent>(args.Message); if (string.IsNullOrEmpty(receivedContent.RoomName)) { throw new ArgumentException("RoomName"); } if (string.Equals(receivedContent.RoomName, ServerModel.MainRoomName)) { ServerModel.API.SendSystemMessage(args.ConnectionId, "Невозможно выйти из основной комнаты."); return; } if (!RoomExists(receivedContent.RoomName, args.ConnectionId)) { return; } using (var server = ServerModel.Get()) { var room = server.Rooms[receivedContent.RoomName]; if (!room.Users.Contains(args.ConnectionId)) { ServerModel.API.SendSystemMessage(args.ConnectionId, "Вы и так не входите в состав этой комнаты."); return; } room.RemoveUser(args.ConnectionId); var closeRoomContent = new ClientRoomClosedCommand.MessageContent { Room = room }; ServerModel.Server.SendMessage(args.ConnectionId, ClientRoomClosedCommand.Id, closeRoomContent); if (string.Equals(room.Admin, args.ConnectionId)) { room.Admin = room.Users.FirstOrDefault(); if (room.Admin != null) { string message = string.Format("Вы назначены администратором комнаты \"{0}\".", room.Name); ServerModel.API.SendSystemMessage(room.Admin, message); } } RefreshRoom(server, room); } }
protected static bool RoomExists(string roomName, string connectionId) { bool result; using(var context = ServerModel.Get()) result = context.Rooms.ContainsKey(roomName); if (!result) { var closeRoomContent = new ClientRoomClosedCommand.MessageContent { Room = new Room(null, roomName) }; ServerModel.Server.SendMessage(connectionId, ClientRoomClosedCommand.CommandId, closeRoomContent); ServerModel.API.SendSystemMessage(connectionId, "На свервере нет комнаты с таким именем."); } return result; }
protected override void OnRun(MessageContent content, ServerCommandArgs args) { if (string.IsNullOrEmpty(content.RoomName)) { throw new ArgumentException("RoomName"); } if (string.Equals(content.RoomName, ServerModel.MainRoomName)) { ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomCantLeaveMainRoom); return; } if (!RoomExists(content.RoomName, args.ConnectionId)) { return; } using (var server = ServerModel.Get()) { var room = server.Rooms[content.RoomName]; if (!room.Users.Contains(args.ConnectionId)) { ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied); return; } room.RemoveUser(args.ConnectionId); var closeRoomContent = new ClientRoomClosedCommand.MessageContent { Room = room }; ServerModel.Server.SendMessage(args.ConnectionId, ClientRoomClosedCommand.CommandId, closeRoomContent); if (string.Equals(room.Admin, args.ConnectionId)) { room.Admin = room.Users.FirstOrDefault(); if (room.Admin != null) { ServerModel.Api.SendSystemMessage(room.Admin, MessageId.RoomAdminChanged, room.Name); } } RefreshRoom(server, room); } }
/// <summary> /// Проверяет существует ли комната. Если нет отправляет вызвавщему команду соединению сообщение об ошибке. /// А также команду закрытия комнаты. /// </summary> /// <param name="RoomName">Название комнаты.</param> /// <param name="connectionId">Id соединения.</param> /// <returns>Возвращает ложь если комнаты не существует.</returns> protected static bool RoomExists(string roomName, string connectionId) { bool result; using (var context = ServerModel.Get()) result = context.Rooms.ContainsKey(roomName); if (!result) { var closeRoomContent = new ClientRoomClosedCommand.MessageContent { Room = new Room(null, roomName) }; ServerModel.Server.SendMessage(connectionId, ClientRoomClosedCommand.Id, closeRoomContent); ServerModel.API.SendSystemMessage(connectionId, "На свервере нет комнаты с таким именем."); } return(result); }
public void Run(ServerCommandArgs args) { var receivedContent = Serializer.Deserialize <MessageContent>(args.Message); if (string.IsNullOrEmpty(receivedContent.RoomName)) { throw new ArgumentException("RoomName"); } if (string.Equals(receivedContent.RoomName, ServerModel.MainRoomName)) { ServerModel.API.SendSystemMessage(args.ConnectionId, "Вы не можете удалить основную комнату."); return; } if (!RoomExists(receivedContent.RoomName, args.ConnectionId)) { return; } using (var context = ServerModel.Get()) { var deletingRoom = context.Rooms[receivedContent.RoomName]; if (!deletingRoom.Admin.Equals(args.ConnectionId)) { ServerModel.API.SendSystemMessage(args.ConnectionId, "Вы не являетесь администратором комнаты. Операция отменена."); return; } context.Rooms.Remove(deletingRoom.Name); var sendingContent = new ClientRoomClosedCommand.MessageContent { Room = deletingRoom }; foreach (string user in deletingRoom.Users) { ServerModel.Server.SendMessage(user, ClientRoomClosedCommand.Id, sendingContent); } } }
protected override void OnRun(MessageContent content, ServerCommandArgs args) { if (string.IsNullOrEmpty(content.RoomName)) { throw new ArgumentException("RoomName"); } if (string.Equals(content.RoomName, ServerModel.MainRoomName)) { ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied); return; } if (!RoomExists(content.RoomName, args.ConnectionId)) { return; } using (var context = ServerModel.Get()) { var deletingRoom = context.Rooms[content.RoomName]; if (!deletingRoom.Admin.Equals(args.ConnectionId)) { ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied); return; } context.Rooms.Remove(deletingRoom.Name); var sendingContent = new ClientRoomClosedCommand.MessageContent { Room = deletingRoom }; foreach (string user in deletingRoom.Users) { ServerModel.Server.SendMessage(user, ClientRoomClosedCommand.CommandId, sendingContent); } } }
protected override void OnRun(MessageContent content, CommandArgs args) { if (string.IsNullOrEmpty(content.RoomName)) { throw new ArgumentException("content.RoomName"); } if (content.RoomName == ServerChat.MainRoomName) { ServerModel.Api.Perform(new ServerSendSystemMessageAction(args.ConnectionId, SystemMessageId.RoomAccessDenied)); return; } using (var server = ServerModel.Get()) { Room deletingRoom; if (!TryGetRoom(server.Chat, content.RoomName, args.ConnectionId, out deletingRoom)) { return; } if (deletingRoom.Admin != args.ConnectionId) { ServerModel.Api.Perform(new ServerSendSystemMessageAction(args.ConnectionId, SystemMessageId.RoomAccessDenied)); return; } server.Chat.RemoveRoom(content.RoomName); var sendingContent = new ClientRoomClosedCommand.MessageContent { RoomName = deletingRoom.Name }; foreach (var user in deletingRoom.Users) { ServerModel.Server.SendMessage(user, ClientRoomClosedCommand.CommandId, sendingContent); } } }