00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#ifndef __KMESSAGESERVER_H__
00021
#define __KMESSAGESERVER_H__
00022
00023
#include <qobject.h>
00024
#include <qserversocket.h>
00025
#include <qstring.h>
00026
#include <qvaluelist.h>
00027
00028
class KMessageIO;
00029
class KMessageServerPrivate;
00030
00175 class KMessageServer :
public QObject
00176 {
00177 Q_OBJECT
00178
00179
public:
00183
enum {
00184 REQ_BROADCAST = 1,
00185 REQ_FORWARD,
00186 REQ_CLIENT_ID,
00187 REQ_ADMIN_ID,
00188 REQ_ADMIN_CHANGE,
00189 REQ_REMOVE_CLIENT,
00190 REQ_MAX_NUM_CLIENTS,
00191 REQ_CLIENT_LIST,
00192 REQ_MAX_REQ = 0xffff };
00193
00197
enum {
00198 MSG_BROADCAST = 101,
00199 MSG_FORWARD,
00200 ANS_CLIENT_ID,
00201 ANS_ADMIN_ID,
00202 ANS_CLIENT_LIST,
00203 EVNT_CLIENT_CONNECTED,
00204 EVNT_CLIENT_DISCONNECTED,
00205 EVNT_MAX_EVNT = 0xffff
00206 };
00207
00211
KMessageServer(Q_UINT16 cookie = 42,
QObject* parent = 0);
00212
00213 ~
KMessageServer();
00214
00218
virtual void Debug();
00219
00220
00221
00229
bool initNetwork (Q_UINT16 port = 0);
00230
00237 Q_UINT16
serverPort ()
const;
00238
00244
void stopNetwork();
00245
00250
bool isOfferingConnections()
const;
00251
00252
00253
00254
public slots:
00268
void addClient (
KMessageIO *);
00269
00281
void removeClient (
KMessageIO *io,
bool broken);
00282
00286
void deleteClients();
00287
00288
private slots:
00295
void removeBrokenClient ();
00296
00297
public:
00309
void setMaxClients(
int maxnumber);
00310
00316
int maxClients()
const;
00317
00323
int clientCount()
const;
00324
00328 QValueList <Q_UINT32>
clientIDs()
const;
00329
00335
KMessageIO *
findClient (Q_UINT32 no)
const;
00336
00343 Q_UINT32
adminID()
const;
00344
00350
void setAdmin (Q_UINT32
adminID);
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
public:
00378
virtual void broadcastMessage (
const QByteArray &msg);
00379
00388
virtual void sendMessage (Q_UINT32
id,
const QByteArray &msg);
00389
00397
virtual void sendMessage (
const QValueList <Q_UINT32> &ids,
const QByteArray &msg);
00398
00399
protected slots:
00409
virtual void getReceivedMessage (
const QByteArray &msg);
00410
00419
virtual void processOneMessage ();
00420
00421
00422
00423 signals:
00428
void clientConnected (
KMessageIO *client);
00429
00437
void connectionLost (
KMessageIO *client);
00438
00451
void messageReceived (
const QByteArray &data, Q_UINT32 clientID,
bool &unknown);
00452
00453
protected:
00459 Q_UINT32
uniqueClientNumber()
const;
00460
00461
private:
00462 KMessageServerPrivate* d;
00463 };
00464
00465
00476 class KMessageServerSocket :
public QServerSocket
00477 {
00478 Q_OBJECT
00479
00480
public:
00481
KMessageServerSocket (Q_UINT16 port,
QObject *parent = 0);
00482 ~
KMessageServerSocket ();
00483
00484
void newConnection (
int socket);
00485
00486 signals:
00487
void newClientConnected (
KMessageIO *client);
00488 };
00489
00490
00491
00492
#endif