def __init__(self, **kwargs): """ Écran de bienvenue contenant le champ de saisie de l'adresse IP du serveur à laquelle se connecter :param kwargs: Arguments clé/valeur de la classe parente """ self.register_event_type("on_confirm_ip_address") super(WelcomeScreen, self).__init__(**kwargs) self.label = Label( text="Please enter the IP address of the server", color=(0, 0, 0, 1), size_hint=(.8, .08), pos_hint={'x': .1, 'y': .6} ) self.textInput = TextInput( multiline=False, size_hint=(.8, .08), pos_hint={'x': .1, 'y': .5} ) self.confirmButton = Button( text="OK", size_hint=(.8, .08), pos_hint={'x': .1, 'y': .4} ) self.confirmButton.bind(on_release=self.handleSubmitAddress) self.popup = CustomPopup( "Error", "Please enter a valid IP address\n\nEx: 192.168.0.10") self.add_widget(self.label) self.add_widget(self.textInput) self.add_widget(self.confirmButton)
def handleSignUpValidation(self, userInfosAreValid): """ Permet de gérer la réception d'une validation d'une demande d'enregistrement à l'application :param userInfosAreValid: Indique si les informations entrées sont valides :type userInfosAreValid: bool :return: :rtype: None """ # Affichage d'un message popup de bienvenue ou d'erreur if userInfosAreValid: popup = CustomPopup("Welcome", "You can now sign in") else: popup = CustomPopup("Error", "Username/Password already taken") # Retour à l'écran de bienvenue lorsque le popup est fermé popup.bind(on_dismiss=self.displaySignInScreen) popup.open()
def handleConnectionError(self, instance): """ Gestion d'une erreur de connexion avec le serveur: affichage d'un message d'erreur :param instance: L'instance ayant appelée la méthode :type instance: Client :return: :rtype: None """ popup = CustomPopup("Error", "Could not connect to the server") popup.open() popup.bind(on_dismiss=self.stop)
def handleSignInValidation(self, userInfosAreValid, userData): """ Permet de gérer la réception d'une validation de demande de connexion à l'application :param userInfosAreValid: Indique si les informations entrées sont valides :type userInfosAreValid: bool :param userData: Les données concernant l'utilisateur :type userData: dict :return: :rtype: None """ # Si la demande est valide, affichage de l'écran de profil if userInfosAreValid: user = self.dto.unserializeLoggedInUser(userData) self.profileScreen.displayUserProfile(user) self.screenManager.current = "Profile" # Sinon, affichage d'un message d'erreur else: CustomPopup("Error", "Username/Password incorrect").open()
def handleConnectionLost(self, instance): """ Gestion d'une perte de connexion avec le serveur: affichage d'un message d'erreur :param instance: L'instance ayant appelée la méthode :type instance: Client :return: :rtype: None """ self.client = None popup = CustomPopup("Error", "Connection lost") popup.open() popup.bind(on_dismiss=self.stop)
def connectToServer(self, instance, ipAddress): """ Permet de gérer la connexion au serveur: lancement de la boucle de la partie client du modèle client-serveur et passage à l'écran de connexion à l'application :param instance: L'écran de bienvenue :type instance: WelcomeScreen :param ipAddress: L'addresse IP à laquelle se connecter :type ipAddress: str :return: :rtype: None """ self.client = Client(ipAddress) self.client.bind(on_connection_lost=self.handleConnectionLost) self.client.bind(on_data_received=self.handleDataReceived) if self.client.isConnected(): thread = Thread(target=self.client.start) thread.start() self.initializeScreens() self.displaySignInScreen() else: CustomPopup("Error", "Could not connect to the server").open()
class WelcomeScreen(CustomScreen): def __init__(self, **kwargs): """ Écran de bienvenue contenant le champ de saisie de l'adresse IP du serveur à laquelle se connecter :param kwargs: Arguments clé/valeur de la classe parente """ self.register_event_type("on_confirm_ip_address") super(WelcomeScreen, self).__init__(**kwargs) self.label = Label( text="Please enter the IP address of the server", color=(0, 0, 0, 1), size_hint=(.8, .08), pos_hint={'x': .1, 'y': .6} ) self.textInput = TextInput( multiline=False, size_hint=(.8, .08), pos_hint={'x': .1, 'y': .5} ) self.confirmButton = Button( text="OK", size_hint=(.8, .08), pos_hint={'x': .1, 'y': .4} ) self.confirmButton.bind(on_release=self.handleSubmitAddress) self.popup = CustomPopup( "Error", "Please enter a valid IP address\n\nEx: 192.168.0.10") self.add_widget(self.label) self.add_widget(self.textInput) self.add_widget(self.confirmButton) def handleSubmitAddress(self, instance): """ Permet de gérer la confirmation de l'addresse IP entrée par l'utilisateur: déclenceh l'événement <on_confirm_ip_address> si l'addresse IP entrée est valide :param instance: Le bouton de confirmation :type instance: Button :return: :rtype: None """ if re.match("\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}", self.textInput.text): self.dispatch("on_confirm_ip_address", self.textInput.text) else: self.popup.open() self.textInput.text = "" def on_confirm_ip_address(self, address): """ L'événement <on_confirm_ip_address>: passe l'addresse IP entrée par l'utilisateur au récepteur :param address: L'addresse IP entrée par l'utilisateur :type: str :return: :rtype: None """ pass