예제 #1
0
        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
                    });
                }
            }
        }
예제 #2
0
        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
                    });
                }
            }
        }
예제 #3
0
        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);
        }
예제 #4
0
        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));
        }
예제 #5
0
        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);
        }
예제 #6
0
        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);
        }