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); }
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"); } }
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())); } }
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); }