Bonjour, la classe suivante, me renvoie plusieurs fois f_LauncherOnis est déjà ouvert, et passe plusieurs fois par finTelechargement et finRecuperationVersion .

Je pencherais vers un problème avec mes connects, mais j'avoue ne pas voir.

Je remercie par avance la personne qui prendra le temps de m'aider.

Psycha

Code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include "CClientMaJ.h"
 
CClientMaJ::CClientMaJ(QUrl urlDownload) : QObject()
{
    qDebug() << "Constructeur" ;
    f_NumVersionOnline = new QFile("versionOnline.txt") ;
    f_NumVersionLocale = new QFile("versionLocale.txt") ;
    f_NumVersionTemp = new QFile("versionTemp.txt") ;
    f_OnisLauncher = new QFile("MaJOnis.exe") ;
    f_AvancementDown = new QFile("avancementTemp.txt") ;
 
    h_HttpOnis = new QHttp ;
    h_HttpVersion = new QHttp ;
 
    s_VersionOnline = new QString ;
    s_VersionLocale = new QString ;
    s_VersionTemp = new QString ;
 
    u_UrlOnis = new QUrl(urlDownload) ;
    u_UrlVersion = new QUrl("********************") ; // url a risque
 
    QHttpRequestHeader headerVersion("GET", u_UrlVersion->path()) ;
    headerVersion.addValue("HOST", u_UrlVersion->host()) ;
    h_HttpVersion->setHost(u_UrlVersion->host()) ;
 
    f_NumVersionOnline->open(QIODevice::WriteOnly) ;
 
    h_HttpVersion->request(headerVersion, 0, f_NumVersionOnline) ;
 
    connect(h_HttpVersion, SIGNAL(requestFinished(int,bool)), this, SLOT(finRecuperationVersion())) ;
    connect(this, SIGNAL(LancerComparaison()), this, SLOT(LaunchComparaison())) ;
    connect(this, SIGNAL(recommencerTelechargement()), this, SLOT(eraseDownload())) ;
    connect(this, SIGNAL(continuerTelechargement()), this, SLOT(relaunchDownload())) ;
    connect(this, SIGNAL(commencerTelechargement()), this, SLOT(launchDownload())) ;
    connect(h_HttpOnis, SIGNAL(requestFinished(int, bool)), this, SLOT(finTelechargement())) ;
}
 
void CClientMaJ::finRecuperationVersion()
{
    qDebug() << "Fin de la recuperation du numero de version online" ;
    h_HttpVersion->close() ;
 
    f_NumVersionOnline->close() ;
 
    emit LancerComparaison() ;
 
}
 
void CClientMaJ::LaunchComparaison()
{
    qDebug() << "Lancement de la comparaison" ;
    f_NumVersionOnline->open(QIODevice::ReadOnly) ;
    f_NumVersionLocale->open(QIODevice::ReadOnly) ;
 
    s_VersionOnline->append(f_NumVersionOnline->readAll()) ;
    s_VersionLocale->append(f_NumVersionLocale->readAll()) ;
 
    f_NumVersionOnline->close() ;
    f_NumVersionLocale->close() ;
 
    if(s_VersionLocale != s_VersionOnline)
    {
	if(f_NumVersionTemp->exists())
	{
	    f_NumVersionTemp->open(QIODevice::ReadOnly) ;
	    s_VersionTemp->append(f_NumVersionTemp->readAll()) ;
	    f_NumVersionTemp->close() ;
 
	    if(s_VersionTemp != s_VersionOnline)
	    {
		emit recommencerTelechargement() ;
	    }
	    else
	    {
		emit continuerTelechargement() ;
	    }
	}
	else
	{
	    emit commencerTelechargement() ;
	}
    }
 
}
 
void CClientMaJ::eraseDownload()
{
    qDebug() << "Erase telechargement" ;
    f_NumVersionTemp->remove() ;
    f_OnisLauncher->remove() ;
    f_AvancementDown->remove() ;
 
    emit commencerTelechargement() ;
}
 
void CClientMaJ::relaunchDownload()
{
    qDebug() << "Relancement du teléchargement" ;
    f_AvancementDown->open(QIODevice::ReadOnly) ;
    QString avancement = f_AvancementDown->readAll() ;
    f_AvancementDown->close() ;
 
    h_HttpOnis->setHost(u_UrlOnis->host()) ;
 
    QHttpRequestHeader headerOnis("GET", u_UrlOnis->path()) ;
    headerOnis.addValue("HOST", u_UrlOnis->host()) ;
    headerOnis.addValue("Range", avancement) ;
 
    f_OnisLauncher->open(QIODevice::Append) ;
 
    h_HttpOnis->request(headerOnis, 0, f_OnisLauncher) ;
}
 
void CClientMaJ::launchDownload()
{
    qDebug() << "Lancement du telechargement" ;
    h_HttpOnis->setHost(u_UrlOnis->host()) ;
 
    QHttpRequestHeader headerOnis("GET", u_UrlOnis->path()) ;
    headerOnis.addValue("HOST", u_UrlOnis->host()) ;
 
    f_OnisLauncher->open(QIODevice::WriteOnly) ;
 
    h_HttpOnis->request(headerOnis, 0, f_OnisLauncher) ;
}
 
void CClientMaJ::finTelechargement()
{
    qDebug() << "Fin du telechargement de Onis" ;
    h_HttpOnis->close() ;
    f_OnisLauncher->close() ;
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#ifndef CCLIENTMAJ_H
#define CCLIENTMAJ_H
 
#include <QHttp>
#include <Qurl>
#include <QString>
#include <QHttpRequestHeader>
#include <QFile>
#include <QDebug>
 
class CClientMaJ : public QObject
{
 
    Q_OBJECT
 
    public:
	CClientMaJ(QUrl) ;
 
    signals :
	void LancerComparaison() ;
	void recommencerTelechargement() ;
	void continuerTelechargement() ;
	void commencerTelechargement() ;
 
    private slots :
	void finRecuperationVersion() ;
	void LaunchComparaison() ;
	void eraseDownload() ;
	void relaunchDownload() ;
	void launchDownload() ;
	void finTelechargement() ;
 
    private:
	QFile *f_OnisLauncher ;
	QFile *f_NumVersionOnline ;
	QFile *f_NumVersionLocale ;
	QFile *f_NumVersionTemp ;
	QFile *f_AvancementDown ;
 
	QString *s_VersionOnline ;
	QString *s_VersionLocale ;
	QString *s_VersionTemp ;
 
	QHttp *h_HttpOnis ;
	QHttp *h_HttpVersion ;
 
	QUrl *u_UrlOnis ;
	QUrl *u_UrlVersion ;
 
} ;
 
#endif // CCLIENTMAJ_H