public void Run(ServerCommandArgs args) { var receivedContent = Serializer.Deserialize <MessageContent>(args.Message); if (receivedContent.User == null) { throw new ArgumentNullException("User"); } if (receivedContent.User.Nick == null) { throw new ArgumentNullException("User.Nick"); } if (receivedContent.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(receivedContent.User.Nick, nick)); if (userExist) { SendFail(args.ConnectionId, "Соединение не может быть зарегистрировано с таким ником. Он занят."); return; } else { ServerModel.Logger.WriteInfo("User login: {0}", receivedContent.User.Nick); server.Users.Add(receivedContent.User.Nick, receivedContent.User); room.AddUser(receivedContent.User.Nick); var regResponseContent = new ClientRegistrationResponseCommand.MessageContent { Registered = true }; ServerModel.Server.RegisterConnection(args.ConnectionId, receivedContent.User.Nick, receivedContent.OpenKey); ServerModel.Server.SendMessage(receivedContent.User.Nick, ClientRegistrationResponseCommand.Id, 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.Id, sendingContent); } ServerModel.Notifier.Registered(new ServerRegistrationEventArgs { Nick = receivedContent.User.Nick }); } } }
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, MessageId.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, MessageId.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); 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 }); } } }
private void Register(UserId userId, UserId tempUserId) { var messageContent = new ClientRegistrationResponseCommand.MessageContent { Registered = true }; ServerModel.Server.RegisterConnection(tempUserId, userId); ServerModel.Server.SendMessage(userId, ClientRegistrationResponseCommand.CommandId, messageContent); }
private void SendFail(UserId userId, SystemMessageId message) { var regResponseContent = new ClientRegistrationResponseCommand.MessageContent { Registered = false, Message = message }; ServerModel.Server.SendMessage(userId, ClientRegistrationResponseCommand.CommandId, regResponseContent, true); ServerModel.Api.Perform(new ServerRemoveUserAction(userId)); }
private void SendFail(string connectionId, string message) { var regResponseContent = new ClientRegistrationResponseCommand.MessageContent { Registered = false, Message = message }; ServerModel.Server.SendMessage(connectionId, ClientRegistrationResponseCommand.CommandId, regResponseContent, true); ServerModel.Api.RemoveUser(connectionId); }
private void Register(string userNick, string tempId) { var messageContent = new ClientRegistrationResponseCommand.MessageContent { Registered = true }; ServerModel.Server.RegisterConnection(tempId, userNick); ServerModel.Server.SendMessage(userNick, ClientRegistrationResponseCommand.CommandId, messageContent); }