J'ai plac=E9 une application sur un serveur web pour permettre aux
utilisateurs de la t=E9l=E9charger puis de l'installer chez eux. D=E8s
qu'ils lancent leur application et qu'une mise =E0 jour est disponible
sur le serveur, les utilisateurs ont la possibilit=E9 d'en b=E9n=E9ficier.
Aujourd'hui, je souhaite changer le serveur qui sert au
t=E9l=E9chargement.
Comment faut-il proc=E9der pour que cela soit transparent pour les
utilisateurs ?
Est-ce qu'il est possible de pr=E9ciser dans l'exe de la derni=E8re
version disponible sur le serveur A que dor=E9navant les mises =E0 jour
seront sur le serveur B ?
Merci d'avance
Sur un projet perso, je me suis fait un auto-update maison : -check d'un fichier INI par http toutes les minutes -si la version a changé lecture des URL de téléchargement dans le m ême fichier -permet de changer facilement de serveur et mettant simplement à jour mon fichier INI -en plus les aides sont sur le site web, et les URL sont dans le fichier INI -donc je peux changer les URL des aides à tout moment -affichage d'un bouton mise à jour -clic utilisateur -simple lancement de téléchargement (toujours HTTP avec lanceappliassociée)
Actuellement 3.000.000 de requêtes sur ce fichier. Ça me me permet d'avoir une stat sur l'utilisation du logiciel au passage.
Cordialement.
Sur un projet perso, je me suis fait un auto-update maison :
-check d'un fichier INI par http toutes les minutes
-si la version a changé lecture des URL de téléchargement dans le m ême
fichier
-permet de changer facilement de serveur et mettant simplement à jour
mon fichier INI
-en plus les aides sont sur le site web, et les URL sont dans le
fichier INI
-donc je peux changer les URL des aides à tout moment
-affichage d'un bouton mise à jour
-clic utilisateur
-simple lancement de téléchargement (toujours HTTP avec
lanceappliassociée)
Actuellement 3.000.000 de requêtes sur ce fichier.
Ça me me permet d'avoir une stat sur l'utilisation du logiciel au
passage.
Sur un projet perso, je me suis fait un auto-update maison : -check d'un fichier INI par http toutes les minutes -si la version a changé lecture des URL de téléchargement dans le m ême fichier -permet de changer facilement de serveur et mettant simplement à jour mon fichier INI -en plus les aides sont sur le site web, et les URL sont dans le fichier INI -donc je peux changer les URL des aides à tout moment -affichage d'un bouton mise à jour -clic utilisateur -simple lancement de téléchargement (toujours HTTP avec lanceappliassociée)
Actuellement 3.000.000 de requêtes sur ce fichier. Ça me me permet d'avoir une stat sur l'utilisation du logiciel au passage.
Cordialement.
Gilles
Dans son message précédent, Alex a écrit :
Sur un projet perso, je me suis fait un auto-update maison : -check d'un fichier INI par http toutes les minutes
Dans un thread séparé?
Dans son message précédent, Alex a écrit :
Sur un projet perso, je me suis fait un auto-update maison :
-check d'un fichier INI par http toutes les minutes
Non dans un timer lancé par une classe au démarrage du projet :
cApplication::gbTimerPrincipal()
Et dedans tu mets les trucs à faire : -toutes les minutes -toutes les heures, etc...
Sinon tu lances un timer dans la fenêtre principale.
Ça devrait aussi marcher avec un thread. Mais j'ai pas voulu me compliquer la vie.
Alex
PROCEDURE PRIVÉE GLOBALE gbTimer()
::ghHeure = HeureSys()
nSec est un entier sOk est une chaîne sTrace est une chaîne
nSec = 60 sOk = PartieDécimale(::ghHeure..Seconde/nSec)
// Update toutes les 60 secondes SI sOk="0" ... ET (FenEtat(cApp::gsFenPrinc)<>Inexistant) ALORS // Fenêtre existe SI cApp::gsFenPrincþnEnCours() ALORS // Fenêtre active ::gbUpdateDetecteHttp() FIN FIN
PROCEDURE PRIVÉE GLOBALE gbTimer()
::ghHeure = HeureSys()
nSec est un entier
sOk est une chaîne
sTrace est une chaîne
nSec = 60
sOk = PartieDécimale(::ghHeure..Seconde/nSec)
// Update toutes les 60 secondes
SI sOk="0" ...
ET (FenEtat(cApp::gsFenPrinc)<>Inexistant) ALORS // Fenêtre existe
SI cApp::gsFenPrinc=FenEnCours() ALORS // Fenêtre active
::gbUpdateDetecteHttp()
FIN
FIN
nSec est un entier sOk est une chaîne sTrace est une chaîne
nSec = 60 sOk = PartieDécimale(::ghHeure..Seconde/nSec)
// Update toutes les 60 secondes SI sOk="0" ... ET (FenEtat(cApp::gsFenPrinc)<>Inexistant) ALORS // Fenêtre existe SI cApp::gsFenPrincþnEnCours() ALORS // Fenêtre active ::gbUpdateDetecteHttp() FIN FIN
Alex
PROCEDURE GLOBALE gbUpdateDetecteHttp(LOCAL bForce est un booléenúux)
oHt est un cHttp
SI ::gbUpdateAfficher OU bForce ALORS SI oHt:mbRequete(::gsVarUpdateIni, ::gsVarUpdateIniLocal) ALORS // Requete HTTP
// Variables site ::gbInitialiseIni(Vrai) // UPDATE.INI
FIN FIN
PROCEDURE GLOBALE gbUpdateDetecteHttp(LOCAL bForce est un
booléen=Faux)
oHt est un cHttp
SI ::gbUpdateAfficher OU bForce ALORS
SI oHt:mbRequete(::gsVarUpdateIni, ::gsVarUpdateIniLocal) ALORS //
Requete HTTP
// Variables site
::gbInitialiseIni(Vrai) // UPDATE.INI
SI bAfficheMisesAJour ALORS ::gbUpdateTrouveeOff = (cApp::gsVarOffVersion>cApp::gsExeVersion) ::gbUpdateTrouveeBeta = (cApp::gsVarBetaVersion>cApp::gsExeVersion) FIN
RENVOYER Vrai
PROCEDURE GLOBALE gbInitialiseIni(LOCAL bAfficheMisesAJour est un
booléen=Faux)
oIni est un cIni
oIni:mbIniInitialise(::gsVarUpdateIniLocal)
// URL Fichier de MAJ
::gsVarUpdateIni = oIni:msIniLit("INI", "URL")
SI bAfficheMisesAJour ALORS
::gbUpdateTrouveeOff = (cApp::gsVarOffVersion>cApp::gsExeVersion)
::gbUpdateTrouveeBeta = (cApp::gsVarBetaVersion>cApp::gsExeVersion)
FIN
SI bAfficheMisesAJour ALORS ::gbUpdateTrouveeOff = (cApp::gsVarOffVersion>cApp::gsExeVersion) ::gbUpdateTrouveeBeta = (cApp::gsVarBetaVersion>cApp::gsExeVersion) FIN
RENVOYER Vrai
Alex
Je ne me suis pas pris la tete : -requete HTTP -écriture du résultat dans un ini local -lecture des variables avec inilit -actions en fonction des variables trouvées
:)
Je ne me suis pas pris la tete :
-requete HTTP
-écriture du résultat dans un ini local
-lecture des variables avec inilit
-actions en fonction des variables trouvées
Je ne me suis pas pris la tete : -requete HTTP -écriture du résultat dans un ini local -lecture des variables avec inilit -actions en fonction des variables trouvées
Je check les mises à jour uniquement si l'utilisateur est sur la fenêtre principale.
Pas besoin de plus dans mon cas.
Alex
Toutes les fonctions W-Langage sont encapsulées dans des classes. Ça fait un code plus court et un tuning global au niveau de l'appli.
Exemple :
Dans toutes les classes j'utilise des affichages Jauge dans la barre de titre de l'appli.
Chaque classe affiche des messages : progression, ok ou echec, erreur, téléchargement, lit, écrit, etc...
Chaque classe gère les erreurs, ex. : -tu retires la clé USB -l'appli n'a plus accès aux fichiers -au lieu de planter elle va te dire de remettre la clé USB -et continuer à fonctionner en mode déconnecté -etc...
Voila :)
Toutes les fonctions W-Langage sont encapsulées dans des classes.
Ça fait un code plus court et un tuning global au niveau de l'appli.
Exemple :
Dans toutes les classes j'utilise des affichages Jauge
dans la barre de titre de l'appli.
Chaque classe affiche des messages :
progression, ok ou echec, erreur, téléchargement, lit, écrit, etc...
Chaque classe gère les erreurs, ex. :
-tu retires la clé USB
-l'appli n'a plus accès aux fichiers
-au lieu de planter elle va te dire de remettre la clé USB
-et continuer à fonctionner en mode déconnecté
-etc...
Toutes les fonctions W-Langage sont encapsulées dans des classes. Ça fait un code plus court et un tuning global au niveau de l'appli.
Exemple :
Dans toutes les classes j'utilise des affichages Jauge dans la barre de titre de l'appli.
Chaque classe affiche des messages : progression, ok ou echec, erreur, téléchargement, lit, écrit, etc...
Chaque classe gère les erreurs, ex. : -tu retires la clé USB -l'appli n'a plus accès aux fichiers -au lieu de planter elle va te dire de remettre la clé USB -et continuer à fonctionner en mode déconnecté -etc...