protected override void OnRun(MessageContent content, ServerCommandArgs args) { if (content.RemoteInfo == null) { throw new ArgumentNullException("Info"); } if (content.PeerPoint == null) { throw new ArgumentNullException("PeerPoint"); } if (string.IsNullOrEmpty(content.ReceiverNick)) { throw new ArgumentException("receiverNick"); } if (!ServerModel.Server.ContainsConnection(content.ReceiverNick)) { ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.P2PUserNotExist); return; } var connectContent = new ClientConnectToPeerCommand.MessageContent { PeerPoint = content.PeerPoint, RemoteInfo = content.RemoteInfo, }; ServerModel.Server.SendMessage(content.ReceiverNick, ClientConnectToPeerCommand.CommandId, connectContent); }
protected override void OnRun(MessageContent content, ServerCommandArgs args) { if (string.IsNullOrEmpty(content.RoomName)) { throw new ArgumentException("RoomName"); } if (string.Equals(content.RoomName, ServerModel.MainRoomName)) { return; } using (var server = ServerModel.Get()) { Room room; if (!TryGetRoom(server, content.RoomName, args.ConnectionId, out room)) { return; } if (!room.Users.Contains(args.ConnectionId)) { ServerModel.Api.SendSystemMessage(args.ConnectionId, SystemMessageId.RoomAccessDenied); return; } var roomRefreshedContent = new ClientRoomRefreshedCommand.MessageContent { Room = room, Users = ServerModel.Api.GetRoomUsers(server, room) }; ServerModel.Server.SendMessage(args.ConnectionId, ClientRoomRefreshedCommand.CommandId, roomRefreshedContent); } }
protected override void OnRun(MessageContent content, ServerCommandArgs args) { if (string.IsNullOrEmpty(content.RoomName)) { throw new ArgumentNullException("RoomName"); } using (var server = ServerModel.Get()) { if (server.Rooms.ContainsKey(content.RoomName)) { ServerModel.Api.SendSystemMessage(args.ConnectionId, SystemMessageId.RoomAlreadyExist); return; } var creatingRoom = content.Type == RoomType.Chat ? new Room(args.ConnectionId, content.RoomName) : new VoiceRoom(args.ConnectionId, content.RoomName); server.Rooms.Add(content.RoomName, creatingRoom); var sendingContent = new ClientRoomOpenedCommand.MessageContent { Room = creatingRoom, Type = content.Type, Users = ServerModel.Api.GetRoomUsers(server, creatingRoom) }; ServerModel.Server.SendMessage(args.ConnectionId, ClientRoomOpenedCommand.CommandId, sendingContent); } }
private void OnPackageReceived(object sender, PackageReceivedEventArgs e) { try { if (e.Exception != null) { ServerModel.Logger.Write(e.Exception); return; } if (!isServerRunning) { return; } var connectionId = ((ServerConnection)sender).Id; var command = ServerModel.Api.GetCommand(e.Package.Id); var args = new ServerCommandArgs(connectionId, e.Package); requestQueue.Add(connectionId, command, args); } catch (Exception exc) { ServerModel.Logger.Write(exc); } }
protected override void OnRun(MessageContent content, ServerCommandArgs args) { if (string.IsNullOrEmpty(content.RoomName)) { throw new ArgumentNullException("RoomName"); } using (var server = ServerModel.Get()) { if (server.Rooms.ContainsKey(content.RoomName)) { ServerModel.Api.SendSystemMessage(args.ConnectionId, "Комната с таким именем уже создана, выберите другое имя."); return; } var creatingRoom = content.Type == RoomType.Chat ? new Room(args.ConnectionId, content.RoomName) : new VoiceRoom(args.ConnectionId, content.RoomName); server.Rooms.Add(content.RoomName, creatingRoom); var sendingContent = new ClientRoomOpenedCommand.MessageContent { Room = creatingRoom, Type = content.Type, Users = creatingRoom.Users.Select(nick => server.Users[nick]).ToList() }; ServerModel.Server.SendMessage(args.ConnectionId, ClientRoomOpenedCommand.CommandId, 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)) { 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; } var roomRefreshedContent = new ClientRoomRefreshedCommand.MessageContent { Room = room, Users = room.Users.Select(nick => server.Users[nick]).ToList() }; ServerModel.Server.SendMessage(args.ConnectionId, ClientRoomRefreshedCommand.CommandId, roomRefreshedContent); } }
private void DataReceivedCallback(object sender, DataReceivedEventArgs e) { try { if (e.Error != null) { throw e.Error; } if (!isServerRunning) { return; } var connectionId = ((ServerConnection)sender).Id; var command = ServerModel.API.GetCommand(e.ReceivedData); var args = new ServerCommandArgs { Message = e.ReceivedData, ConnectionId = connectionId, }; requestQueue.Add(connectionId, command, args); } catch (Exception exc) { ServerModel.Logger.Write(exc); } }
protected override void OnRun(MessageContent content, ServerCommandArgs args) { if (content.File == null) { throw new ArgumentNullException("File"); } if (string.IsNullOrEmpty(content.RoomName)) { throw new ArgumentException("RoomName"); } if (!RoomExists(content.RoomName, args.ConnectionId)) { return; } using (var server = ServerModel.Get()) { var room = server.Rooms[content.RoomName]; if (!room.Files.Exists(file => file.Equals(content.File))) { return; } if (!room.ContainsUser(args.ConnectionId)) { ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied); return; } bool access = false; if (room.Admin != null) { access |= args.ConnectionId.Equals(room.Admin); } access |= args.ConnectionId.Equals(content.File.Owner.Nick); if (!access) { ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.FileRemoveAccessDenied); return; } room.Files.Remove(content.File); ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.FileRemoved, content.File.Name); var postedFileDeletedContent = new ClientPostedFileDeletedCommand.MessageContent() { File = content.File, RoomName = room.Name, }; foreach (string user in room.Users) { ServerModel.Server.SendMessage(user, ClientPostedFileDeletedCommand.CommandId, postedFileDeletedContent); } } }
protected override void OnRun(MessageContent content, ServerCommandArgs args) { if (content.File == null) { throw new ArgumentNullException("File"); } if (string.IsNullOrEmpty(content.RoomName)) { throw new ArgumentException("RoomName"); } if (!RoomExists(content.RoomName, args.ConnectionId)) { return; } using (var server = ServerModel.Get()) { var room = server.Rooms[content.RoomName]; if (!room.Files.Exists(file => file.Equals(content.File))) { return; } if (!room.ContainsUser(args.ConnectionId)) { ServerModel.Api.SendSystemMessage(args.ConnectionId, "Вы не входите в состав этой комнаты."); return; } bool access = false; if (room.Admin != null) { access |= args.ConnectionId.Equals(room.Admin); } access |= args.ConnectionId.Equals(content.File.Owner.Nick); if (!access) { ServerModel.Api.SendSystemMessage(args.ConnectionId, "Вы не можете удалить данный файл. Не хватает прав."); return; } room.Files.Remove(content.File); ServerModel.Api.SendSystemMessage(args.ConnectionId, string.Format("Файл \"{0}\" удален с раздачи.", content.File.Name)); var postedFileDeletedContent = new ClientPostedFileDeletedCommand.MessageContent() { File = content.File, RoomName = room.Name, }; foreach (string user in room.Users) { ServerModel.Server.SendMessage(user, ClientPostedFileDeletedCommand.CommandId, postedFileDeletedContent); } } }
protected override void OnRun(MessageContent content, ServerCommandArgs args) { if (content.User == null) { throw new ArgumentNullException("User"); } if (content.User.Nick == null) { throw new ArgumentNullException("User.Nick"); } if (content.User.Nick.Contains(Connection.TempConnectionPrefix)) { SendFail(args.ConnectionId, "Соединение не может быть зарегистрировано с таким ником. Выберите другой."); return; } using (var server = ServerModel.Get()) { var room = server.Rooms[ServerModel.MainRoomName]; var userExist = room.Users.Any(nick => string.Equals(content.User.Nick, nick)); if (userExist) { SendFail(args.ConnectionId, "Соединение не может быть зарегистрировано с таким ником. Он занят."); return; } else { ServerModel.Logger.WriteInfo("User login: {0}", content.User.Nick); server.Users.Add(content.User.Nick, content.User); room.AddUser(content.User.Nick); var regResponseContent = new ClientRegistrationResponseCommand.MessageContent { Registered = true }; ServerModel.Server.RegisterConnection(args.ConnectionId, content.User.Nick); ServerModel.Server.SendMessage(content.User.Nick, ClientRegistrationResponseCommand.CommandId, regResponseContent); var sendingContent = new ClientRoomRefreshedCommand.MessageContent { Room = room, Users = room.Users.Select(nick => server.Users[nick]).ToList() }; foreach (var connectionId in room.Users) { ServerModel.Server.SendMessage(connectionId, ClientRoomRefreshedCommand.CommandId, sendingContent); } ServerModel.Notifier.Registered(new ServerRegistrationEventArgs { Nick = content.User.Nick }); } } }
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, "Невозможно удалить пользователей из основной комнаты."); 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, "Вы не являетесь администратором комнаты. Операция отменена."); 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, "Невозможно удалить из комнаты администратора."); continue; } room.RemoveUser(user.Nick); ServerModel.Server.SendMessage(user.Nick, ClientRoomClosedCommand.CommandId, sendingContent); } RefreshRoom(server, room); } }
protected override void OnRun(MessageContent content, ServerCommandArgs args) { if (string.IsNullOrEmpty(content.Message)) { throw new ArgumentException("Message"); } if (string.IsNullOrEmpty(content.RoomName)) { throw new ArgumentException("RoomName"); } 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; } if (content.MessageId != null && !room.IsMessageBelongToUser(args.ConnectionId, content.MessageId.Value)) { ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.MessageEditAccessDenied); return; } Message message = null; if (content.MessageId == null) { message = room.AddMessage(args.ConnectionId, content.Message); } else { message = room.GetMessage(content.MessageId.Value); message.Text = content.Message; } var sendingContent = new ClientOutRoomMessageCommand.MessageContent { Message = message.Text, RoomName = content.RoomName, Sender = args.ConnectionId, MessageId = message.Id }; foreach (string user in room.Users.Where(u => u != null)) { ServerModel.Server.SendMessage(user, ClientOutRoomMessageCommand.CommandId, sendingContent); } } }
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, ServerCommandArgs args) { if (content.Nick == null) { throw new ArgumentNullException("Info"); } if (!ServerModel.Server.ContainsConnection(content.Nick)) { ServerModel.Api.SendSystemMessage(args.ConnectionId, SystemMessageId.P2PUserNotExist); return; } ServerModel.Server.P2PService.Introduce(args.ConnectionId, content.Nick); }
protected override void OnRun(MessageContent content, ServerCommandArgs args) { if (content.Nick == null) { throw new ArgumentNullException("Info"); } if (!ServerModel.Server.ContainsConnection(content.Nick)) { ServerModel.Api.SendSystemMessage(args.ConnectionId, "Данного пользователя не существует."); return; } ServerModel.Server.P2PService.Introduce(args.ConnectionId, content.Nick); }
protected override void OnRun(MessageContent content, ServerCommandArgs args) { if (string.IsNullOrEmpty(content.RoomName)) { throw new ArgumentException("RoomName"); } using (var server = ServerModel.Get()) { Room room; if (!TryGetRoom(server, content.RoomName, args.ConnectionId, out room)) { return; } var file = room.Files.Find(f => f.Id == content.FileId); if (file == null) { return; } if (!room.ContainsUser(args.ConnectionId)) { ServerModel.Api.SendSystemMessage(args.ConnectionId, SystemMessageId.RoomAccessDenied); return; } if (room.Admin != args.ConnectionId && file.Id.Owner != args.ConnectionId) { ServerModel.Api.SendSystemMessage(args.ConnectionId, SystemMessageId.FileRemoveAccessDenied); return; } room.Files.Remove(file); ServerModel.Api.SendSystemMessage(args.ConnectionId, SystemMessageId.FileRemoved, file.Name); var postedFileDeletedContent = new ClientPostedFileDeletedCommand.MessageContent { RoomName = room.Name, FileId = file.Id }; foreach (string user in room.Users) { ServerModel.Server.SendMessage(user, ClientPostedFileDeletedCommand.CommandId, postedFileDeletedContent); } } }
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, "Невозможно выйти из основной комнаты."); 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, "Вы и так не входите в состав этой комнаты."); 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) { var message = string.Format("Вы назначены администратором комнаты \"{0}\".", room.Name); ServerModel.Api.SendSystemMessage(room.Admin, message); } } RefreshRoom(server, room); } }
protected override void OnRun(MessageContent content, ServerCommandArgs args) { if (content.User == null) { throw new ArgumentNullException("User"); } if (content.User.Nick == null) { throw new ArgumentNullException("User.Nick"); } if (content.User.Nick.Contains(Connection.TempConnectionPrefix)) { SendFail(args.ConnectionId, SystemMessageId.NotRegisteredBadName); return; } using (var server = ServerModel.Get()) { var room = server.Rooms[ServerModel.MainRoomName]; var userExist = room.Users.Any(nick => string.Equals(content.User.Nick, nick)); if (userExist) { SendFail(args.ConnectionId, SystemMessageId.NotRegisteredNameAlreadyExist); return; } else { ServerModel.Logger.WriteInfo("User login: {0}", content.User.Nick); server.Users.Add(content.User.Nick, content.User); room.AddUser(content.User.Nick); Register(content.User.Nick, args.ConnectionId); var users = ServerModel.Api.GetRoomUsers(server, room); SendRefresh(content.User.Nick, room, users); SendOpened(content.User.Nick, room, users); // Notify ServerModel.Notifier.Registered(new ServerRegistrationEventArgs { Nick = content.User.Nick }); } } }
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); } }
protected override void OnRun(MessageContent content, ServerCommandArgs args) { if (content.File == null) { throw new ArgumentNullException("File"); } if (string.IsNullOrEmpty(content.RoomName)) { throw new ArgumentException("RoomName"); } if (!RoomExists(content.RoomName, args.ConnectionId)) { return; } using (var context = ServerModel.Get()) { var room = context.Rooms[content.RoomName]; if (!room.Users.Contains(args.ConnectionId)) { ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied); return; } if (room.Files.FirstOrDefault(file => file.Equals(content.File)) == null) { room.Files.Add(content.File); } var sendingContent = new ClientFilePostedCommand.MessageContent { File = content.File, RoomName = content.RoomName }; foreach (string user in room.Users) { ServerModel.Server.SendMessage(user, ClientFilePostedCommand.CommandId, sendingContent); } } }
protected override void OnRun(MessageContent content, ServerCommandArgs args) { if (string.IsNullOrEmpty(content.RoomName)) { throw new ArgumentException("RoomName"); } if (string.IsNullOrEmpty(content.NewAdmin)) { throw new ArgumentNullException("NewAdmin"); } if (string.Equals(content.RoomName, ServerModel.MainRoomName)) { ServerModel.Api.SendSystemMessage(args.ConnectionId, SystemMessageId.RoomAccessDenied); return; } using (var server = ServerModel.Get()) { Room room; if (!TryGetRoom(server, content.RoomName, args.ConnectionId, out room)) { return; } if (!room.Admin.Equals(args.ConnectionId)) { ServerModel.Api.SendSystemMessage(args.ConnectionId, SystemMessageId.RoomAccessDenied); return; } if (!room.Users.Contains(content.NewAdmin)) { ServerModel.Api.SendSystemMessage(args.ConnectionId, SystemMessageId.RoomUserNotExist); return; } room.Admin = content.NewAdmin; ServerModel.Api.SendSystemMessage(content.NewAdmin, SystemMessageId.RoomAdminChanged, room.Name); } }
protected override void OnRun(MessageContent content, ServerCommandArgs args) { if (string.IsNullOrEmpty(content.RoomName)) { throw new ArgumentException("RoomName"); } if (content.NewAdmin == null) { throw new ArgumentNullException("NewAdmin"); } if (string.Equals(content.RoomName, ServerModel.MainRoomName)) { ServerModel.Api.SendSystemMessage(args.ConnectionId, "Невозможно назначить администратора для главной комнаты."); 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, "Вы не являетесь администратором комнаты. Операция отменена."); return; } room.Admin = content.NewAdmin.Nick; var message = string.Format("Вы назначены администратором комнаты \"{0}\".", room.Name); ServerModel.Api.SendSystemMessage(content.NewAdmin.Nick, message); } }
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, "Вы не можете удалить основную комнату."); 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, "Вы не являетесь администратором комнаты. Операция отменена."); 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, 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, ServerCommandArgs args) { if (string.IsNullOrEmpty(content.RoomName)) { throw new ArgumentException("RoomName"); } if (content.NewAdmin == null) { throw new ArgumentNullException("NewAdmin"); } 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; } room.Admin = content.NewAdmin.Nick; ServerModel.Api.SendSystemMessage(content.NewAdmin.Nick, MessageId.RoomAdminChanged, room.Name); } }
protected override void OnRun(ServerCommandArgs args) { }
protected override void OnRun(ServerCommandArgs args) { ServerModel.Api.RemoveUser(args.ConnectionId); }
private void DataReceivedCallback(object sender, DataReceivedEventArgs e) { try { if (e.Error != null) throw e.Error; if (!isServerRunning) return; var connectionId = ((ServerConnection)sender).Id; var command = ServerModel.API.GetCommand(e.ReceivedData); var args = new ServerCommandArgs { Message = e.ReceivedData, ConnectionId = connectionId, }; requestQueue.Add(connectionId, command, args); } catch (Exception exc) { ServerModel.Logger.Write(exc); } }
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.RoomItsMainRoom); 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 invitedUsers = new HashSet <string>(); foreach (var user in content.Users) { if (room.ContainsUser(user.Nick)) { continue; } room.AddUser(user.Nick); invitedUsers.Add(user.Nick); } var users = room.Users .Select(nick => server.Users[nick]) .ToList(); var roomOpenContent = new ClientRoomOpenedCommand.MessageContent { Room = room, Type = room is VoiceRoom ? RoomType.Voice : RoomType.Chat, Users = users }; var roomRefreshContent = new ClientRoomRefreshedCommand.MessageContent { Room = room, Users = users }; foreach (var userId in room.Users) { if (invitedUsers.Contains(userId)) { ServerModel.Server.SendMessage(userId, ClientRoomOpenedCommand.CommandId, roomOpenContent); } else { ServerModel.Server.SendMessage(userId, ClientRoomRefreshedCommand.CommandId, roomRefreshContent); } } } }
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, SystemMessageId.RoomItsMainRoom); return; } using (var server = ServerModel.Get()) { Room room; if (!TryGetRoom(server, content.RoomName, args.ConnectionId, out room)) { return; } if (!room.Admin.Equals(args.ConnectionId)) { ServerModel.Api.SendSystemMessage(args.ConnectionId, SystemMessageId.RoomAccessDenied); return; } var invitedUsers = new HashSet <string>(); foreach (var userNick in content.Users) { if (room.ContainsUser(userNick)) { continue; } room.AddUser(userNick); invitedUsers.Add(userNick); } var users = ServerModel.Api.GetRoomUsers(server, room); var roomOpenContent = new ClientRoomOpenedCommand.MessageContent { Room = room, Type = room.Type, Users = users }; var roomRefreshContent = new ClientRoomRefreshedCommand.MessageContent { Room = room, Users = users }; foreach (var userId in room.Users) { if (invitedUsers.Contains(userId)) { ServerModel.Server.SendMessage(userId, ClientRoomOpenedCommand.CommandId, roomOpenContent); } else { ServerModel.Server.SendMessage(userId, ClientRoomRefreshedCommand.CommandId, roomRefreshContent); } } } }
protected override void OnRun(ServerCommandArgs args) { ServerModel.Server.SendMessage(args.ConnectionId, ClientPingResponceCommand.CommandId, true); }