Esempio n. 1
0
        public IResponseData <UserSignInResponse> SignIn([FromBody] UserSignInRequest request)
        {
            IResponseData <UserSignInResponse> response = new ResponseData <UserSignInResponse>();

            try
            {
                IUserService       userService    = IoC.Container.Resolve <IUserService>();
                UserSignInResponse signInResponse = userService.SignIn(request);
                response.SetData(signInResponse);
            }
            catch (ValidationException ex)
            {
                response.SetErrors(ex.Errors);
                response.SetStatus(System.Net.HttpStatusCode.PreconditionFailed);
            }
            return(response);
        }
Esempio n. 2
0
        private void ClientLoop(object o)
        {
            Socket temp_client = ((IDSocket)o).Handle_Socket;
            User   client_user = new User(((IDSocket)o).Handle_ID, null, null);

            try
            {
                while (true)
                {
                    Request client_request = DataTransferHelper.GetRequestFromClient(temp_client);

                    switch (client_request.RequestType)
                    {
                    case "registration":
                    {
                        RegistrationRequest registrationRequest = client_request as RegistrationRequest;

                        if (!IsUserNameExists(registrationRequest.UserName))
                        {
                            AddUser(new User(GetNewUserID(), registrationRequest.UserName, registrationRequest.Password));
                            RegistrationResponse registrationResponse = new RegistrationResponse();
                            DataTransferHelper.SendResponseToClient(temp_client, registrationResponse);
                        }
                        else
                        {
                            RegistrationResponse registrationResponse = new RegistrationResponse()
                            {
                                Ok    = false,
                                Error = "user_name_exists"
                            };
                            DataTransferHelper.SendResponseToClient(temp_client, registrationResponse);
                        }

                        break;
                    }

                    case "auth":
                    {
                        AuthRequest authRequest = client_request as AuthRequest;

                        if (IsUserNameExists(authRequest.UserName))
                        {
                            User temp_user = GetUserByName(authRequest.UserName);
                            if (authRequest.Password == temp_user.Password)
                            {
                                if (IsBannedUser(temp_user.ID))
                                {
                                    BanResponse banResponse = new BanResponse();
                                    DataTransferHelper.SendResponseToClient(temp_client, banResponse);
                                }
                                else
                                {
                                    if (IsConnectedUser(temp_user.ID))
                                    {
                                        AuthResponse authResponse = new AuthResponse(temp_user);
                                        authResponse.Error = "user_is_connected";
                                        authResponse.Ok    = false;
                                        DataTransferHelper.SendResponseToClient(temp_client, authResponse);
                                    }
                                    else
                                    {
                                        AuthResponse authResponse = new AuthResponse(temp_user);
                                        DataTransferHelper.SendResponseToClient(temp_client, authResponse);
                                        temp_user.IsConnected = true;
                                        RaisePropertyChangedEvent("UserDataBase");
                                        RaisePropertyChangedEvent("ConnectedUsers");
                                        _clients.Add(temp_user.ID, temp_client);
                                        _clients.Remove(client_user.ID);
                                        client_user.ID       = temp_user.ID;
                                        client_user.Name     = temp_user.Name;
                                        client_user.Password = temp_user.Password;

                                        for (int i = 0; i < ConnectedUsers.Count(); i++)
                                        {
                                            if (ConnectedUsers.ElementAt(i).ID == client_user.ID)
                                            {
                                                continue;
                                            }
                                            UserSignInResponse userSignInResponse = new UserSignInResponse(ConnectedUsers.ElementAt(i));
                                            DataTransferHelper.SendResponseToClient(temp_client, userSignInResponse);
                                        }
                                        for (int i = 0; i < _clients.Count(); i++)
                                        {
                                            if (_clients.ElementAt(i).Key == client_user.ID)
                                            {
                                                continue;
                                            }
                                            UserSignInResponse userSignInResponse = new UserSignInResponse(client_user);
                                            DataTransferHelper.SendResponseToClient(_clients.ElementAt(i).Value, userSignInResponse);
                                        }
                                    }
                                }
                            }
                            else
                            {
                                AuthResponse authResponse = new AuthResponse(null)
                                {
                                    Ok    = false,
                                    Error = "invalid_password"
                                };
                                DataTransferHelper.SendResponseToClient(temp_client, authResponse);
                            }
                        }
                        else
                        {
                            AuthResponse authResponse = new AuthResponse(null)
                            {
                                Ok    = false,
                                Error = "user_name_not_exists"
                            };
                            DataTransferHelper.SendResponseToClient(temp_client, authResponse);
                        }

                        break;
                    }

                    case "signout":
                    {
                        GetUserByID(client_user.ID).IsConnected = false;
                        throw new Exception();
                    }

                    case "message":
                    {
                        MessageResponse messageResponse = new MessageResponse((client_request as MessageRequest).Message);
                        SendResponseToAllClients(messageResponse);
                        break;
                    }

                    default:
                        break;
                    }
                }
            }
            catch (Exception e)
            {
            }
            finally
            {
                temp_client?.Close();
                _clients.Remove(client_user.ID);
                if (client_user != null)
                {
                    User temp_user = GetUserByID(client_user.ID);
                    if (temp_user != null)
                    {
                        temp_user.IsConnected = false;
                    }
                    UserSignOutResponse userSignOutResponse = new UserSignOutResponse(client_user);
                    SendResponseToAllClients(userSignOutResponse);
                }
                RaisePropertyChangedEvent("UserDataBase");
                RaisePropertyChangedEvent("ConnectedUsers");
            }
        }
Esempio n. 3
0
        private static void ServerListenerLoop()
        {
            try
            {
                while (true)
                {
                    Response server_response = DataTransferHelper.GetResponseFromServer(Client);

                    switch (server_response.ResponseType)
                    {
                    case "user_signin":
                    {
                        UserSignInResponse userSignInResponse = server_response as UserSignInResponse;
                        InvokeHelper.ApplicationInvoke(() => _chatViewModel.Users.Add(userSignInResponse.User));
                        break;
                    }

                    case "user_signout":
                    {
                        UserSignOutResponse userSignOutResponse = server_response as UserSignOutResponse;
                        for (int i = 0; i < _chatViewModel.Users.Count; i++)
                        {
                            if (_chatViewModel.Users[i].ID == userSignOutResponse.User.ID)
                            {
                                InvokeHelper.ApplicationInvoke(() => _chatViewModel.Users.RemoveAt(i));
                            }
                        }
                        break;
                    }

                    case "auth":
                    {
                        if (server_response.Ok)
                        {
                            ClientUser = (server_response as AuthResponse).User;
                            InvokeHelper.ApplicationInvoke
                            (
                                () =>
                                {
                                    ChatView chatView = new ChatView();
                                    _chatViewModel    = chatView.DataContext as ChatViewModel;
                                    SetView(chatView);
                                }
                            );
                        }
                        else
                        {
                            if (server_response.Error == "user_name_not_exists")
                            {
                                throw new InvalidUserNameException();
                            }
                            else if (server_response.Error == "invalid_password")
                            {
                                throw new InvalidPasswordException();
                            }
                            else if (server_response.Error == "user_is_connected")
                            {
                                throw new Exception("User is connected");
                            }
                        }

                        break;
                    }

                    case "registration":
                    {
                        if (server_response.Ok)
                        {
                            InvokeHelper.ApplicationInvoke(() => ShowSnackBarMessage("User successfully registered"));
                            Disconnect();
                        }
                        else
                        {
                            if (server_response.Error == "user_name_exists")
                            {
                                throw new InvalidUserNameException("This user name already exists");
                            }
                        }

                        break;
                    }

                    case "message":
                    {
                        InvokeHelper.ApplicationInvoke(() => _chatViewModel.Messages.Add((server_response as MessageResponse).Message));
                        break;
                    }

                    case "ban":
                    {
                        throw new UserBannedException();
                    }

                    default:
                        break;
                    }
                }
            }
            catch (UserBannedException e)
            {
                InvokeHelper.ApplicationInvoke(() => ShowSnackBarMessage(e.Message));
            }
            catch (InvalidUserNameException e)
            {
                InvokeHelper.ApplicationInvoke(() => ShowSnackBarMessage(e.Message));
            }
            catch (InvalidPasswordException e)
            {
                InvokeHelper.ApplicationInvoke(() => ShowSnackBarMessage(e.Message));
            }
            catch (SocketException)
            {
                InvokeHelper.ApplicationInvoke(() => ShowSnackBarMessage("Connection with server was destroyed."));
            }
            catch (Exception)
            {}
            finally
            {
                IsConnected = false;
                Client?.Close();
                Client         = null;
                _chatViewModel = null;
                ClientUser     = null;
                InvokeHelper.ApplicationInvoke(() => SetView(new StartView()));
            }
        }
Esempio n. 4
0
        public UserSignInResponse UserSignIn([FromBody] UserSignInRequest req)
        {
            var rep = new UserSignInResponse();

            if (req.IsOAuth)
            {
                var param = req.OAuthParam;
                var temp  = DefaultStorage.UserOAuthGet(param.Provider, param.OpenId);
                if (temp != null)
                {
                    rep.Data = DefaultStorage.UserGet(temp.Id);
                    if (rep.Data != null)
                    {
                        Task.Factory.StartNew(() => SyncUserOAuth(temp.Id, param));
                    }
                }
                else
                {
                    var user    = new User();
                    var profile = new UserProfile();

                    var now = DateTime.Now;

                    user.Guid       = Guid.NewGuid().ToString();// ObjectId.New();
                    user.Name       = param.OpenId;
                    user.Email      = string.Empty;
                    user.Mobile     = string.Empty;
                    user.Nickname   = param.OpenName;
                    user.Password   = string.Empty;
                    user.Role       = UserRole.Buyer;
                    user.Grade      = UserGrade.One;
                    user.Limitation = UserLimitation.None;
                    user.Permission = UserPermission.None;
                    user.Avatar     = string.Empty;
                    user.Status     = UserStatus.Normal;
                    user.AuthedOn   = null;
                    user.CreatedBy  = param.Provider;
                    user.CreatedOn  = now;
                    user.ModifiedBy = "app.api";

                    profile.Code         = string.Empty;
                    profile.Name         = string.Empty;
                    profile.Gender       = Gender.Secrect;
                    profile.Marital      = Marital.Secrect;
                    profile.Birthday     = null;
                    profile.Phone        = string.Empty;
                    profile.Mobile       = string.Empty;
                    profile.RegionId     = string.Empty;
                    profile.Street       = string.Empty;
                    profile.SignUpIp     = req.Ip;
                    profile.SignUpBy     = 0;
                    profile.TraceCode    = req.TraceCode;
                    profile.LastSignInIp = req.Ip;
                    profile.LastSignInOn = now;

                    user.Profile = profile;

                    var id = DefaultStorage.UserCreate(user);
                    if (id > 0)
                    {
                        user.Id    = id;
                        profile.Id = id;
                        rep.Data   = user;
                        Task.Factory.StartNew(() => CreateUserOAuth(id, param));
                    }
                    else
                    {
                        rep.Error("关联用户失败", 201);
                    }
                }
            }
            else
            {
                if (req.Uid.IsEmpty())
                {
                    rep.Error("请输入登录帐号");
                    return(rep);
                }
                if (req.Pwd.IsEmpty())
                {
                    rep.Error("请输入登录密码");
                    return(rep);
                }
                var user = DefaultStorage.UserGet(req.Uid, req.Pwd);
                if (user != null)
                {
                    rep.Data = user;
                }
                else
                {
                    rep.Error("用户名或密码错误", 200);
                    return(rep);
                }
            }
            return(rep);
        }