• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdegames API Reference
  • KDE Home
  • Contact Us
 

libkdegames/libkdegamesprivate/kgame

  • sources
  • kde-4.14
  • kdegames
  • libkdegames
  • libkdegamesprivate
  • kgame
kgamenetwork.cpp
Go to the documentation of this file.
1 /*
2  This file is part of the KDE games library
3  Copyright (C) 2001 Martin Heni (kde at heni-online.de)
4  Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
5 
6  This library is free software; you can redistribute it and/or
7  modify it under the terms of the GNU Library General Public
8  License version 2 as published by the Free Software Foundation.
9 
10  This library is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  Library General Public License for more details.
14 
15  You should have received a copy of the GNU Library General Public License
16  along with this library; see the file COPYING.LIB. If not, write to
17  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  Boston, MA 02110-1301, USA.
19 */
20 
21 #include "kgamenetwork.h"
22 #include "kgamenetwork.moc"
23 #include "kgamemessage.h"
24 #include "kgameerror.h"
25 
26 #include "kmessageserver.h"
27 #include "kmessageclient.h"
28 #include "kmessageio.h"
29 #include <dnssd/publicservice.h>
30 
31 #include <kdebug.h>
32 
33 #include <qbuffer.h>
34 //Added by qt3to4:
35 #include <QList>
36 
37 
38 class KGameNetworkPrivate
39 {
40 public:
41  KGameNetworkPrivate()
42  {
43  mMessageClient = 0;
44  mMessageServer = 0;
45  mDisconnectId = 0;
46  mService = 0;
47  }
48 
49 public:
50  KMessageClient* mMessageClient;
51  KMessageServer* mMessageServer;
52  quint32 mDisconnectId; // Stores gameId() over a disconnect process
53  DNSSD::PublicService* mService;
54  QString mType;
55  QString mName;
56 
57  int mCookie;
58 };
59 
60 // ------------------- NETWORK GAME ------------------------
61 KGameNetwork::KGameNetwork(int c, QObject* parent)
62  : QObject(parent),
63  d( new KGameNetworkPrivate )
64 {
65  d->mCookie = (qint16)c;
66 
67  // Init the game as a local game, i.e.
68  // create your own KMessageServer and a KMessageClient connected to it.
69  setMaster();
70 
71  kDebug(11001) << "this=" << this <<", cookie=" << cookie() << "sizeof(this)="<<sizeof(KGameNetwork);
72 }
73 
74 KGameNetwork::~KGameNetwork()
75 {
76  kDebug(11001) << "this=" << this;
77 // Debug();
78  delete d->mService;
79  delete d;
80 }
81 
82 // ----------------------------- status methods
83 bool KGameNetwork::isNetwork() const
84 { return isOfferingConnections() || d->mMessageClient->isNetwork();}
85 
86 quint32 KGameNetwork::gameId() const
87 {
88  //return d->mMessageClient->id() ;
89  // Return stored id in the case of disconnect. In any other
90  // case the disconnect id is 0
91  if (d->mMessageClient->id()!=0 ) {
92  return d->mMessageClient->id() ;
93  } else {
94  return d->mDisconnectId;
95  }
96 }
97 
98 int KGameNetwork::cookie() const
99 { return d->mCookie; }
100 
101 bool KGameNetwork::isMaster() const
102 { return (d->mMessageServer != 0); }
103 
104 bool KGameNetwork::isAdmin() const
105 { return (d->mMessageClient->isAdmin()); }
106 
107 KMessageClient* KGameNetwork::messageClient() const
108 { return d->mMessageClient; }
109 
110 KMessageServer* KGameNetwork::messageServer() const
111 { return d->mMessageServer; }
112 
113 // ----------------------- network init
114 void KGameNetwork::setMaster()
115 {
116  if (!d->mMessageServer) {
117  d->mMessageServer = new KMessageServer (cookie(), this);
118  } else {
119  kWarning(11001) << "Server already running!!";
120  }
121  if (!d->mMessageClient) {
122  d->mMessageClient = new KMessageClient (this);
123  connect (d->mMessageClient, SIGNAL(broadcastReceived(QByteArray,quint32)),
124  this, SLOT(receiveNetworkTransmission(QByteArray,quint32)));
125  connect (d->mMessageClient, SIGNAL(connectionBroken()),
126  this, SIGNAL(signalConnectionBroken()));
127  connect (d->mMessageClient, SIGNAL(aboutToDisconnect(quint32)),
128  this, SLOT(aboutToLoseConnection(quint32)));
129  connect (d->mMessageClient, SIGNAL(connectionBroken()),
130  this, SLOT(slotResetConnection()));
131 
132  connect (d->mMessageClient, SIGNAL(adminStatusChanged(bool)),
133  this, SLOT(slotAdminStatusChanged(bool)));
134  connect (d->mMessageClient, SIGNAL(eventClientConnected(quint32)),
135  this, SIGNAL(signalClientConnected(quint32)));
136  connect (d->mMessageClient, SIGNAL(eventClientDisconnected(quint32,bool)),
137  this, SIGNAL(signalClientDisconnected(quint32,bool)));
138 
139  // broacast and direct messages are treated equally on receive.
140  connect (d->mMessageClient, SIGNAL(forwardReceived(QByteArray,quint32,QList<quint32>)),
141  d->mMessageClient, SIGNAL(broadcastReceived(QByteArray,quint32)));
142 
143  } else {
144  // should be no problem but still has to be tested
145  kDebug(11001) << "Client already exists!";
146  }
147  d->mMessageClient->setServer(d->mMessageServer);
148 }
149 
150 void KGameNetwork::setDiscoveryInfo(const QString& type, const QString& name)
151 {
152  kDebug() << type << ":" << name;
153  d->mType = type;
154  d->mName = name;
155  tryPublish();
156 }
157 
158 void KGameNetwork::tryPublish()
159 {
160  if (d->mType.isNull() || !isOfferingConnections()) return;
161  if (!d->mService) d->mService = new DNSSD::PublicService(d->mName,d->mType,port());
162  else {
163  if (d->mType!=d->mService->type()) d->mService->setType(d->mType);
164  if (d->mName!=d->mService->serviceName()) d->mService->setServiceName(d->mName);
165  }
166  if (!d->mService->isPublished()) d->mService->publishAsync();
167 }
168 
169 void KGameNetwork::tryStopPublishing()
170 {
171  if (d->mService) d->mService->stop();
172 }
173 
174 bool KGameNetwork::offerConnections(quint16 port)
175 {
176  kDebug (11001) << "on port" << port;
177  if (!isMaster()) {
178  setMaster();
179  }
180 
181  // Make sure this is 0
182  d->mDisconnectId = 0;
183 
184  // FIXME: This debug message can be removed when the program is working correct.
185  if (d->mMessageServer && d->mMessageServer->isOfferingConnections()) {
186  kDebug (11001) << "Already running as server! Changing the port now!";
187  }
188 
189  tryStopPublishing();
190  kDebug (11001) << "before Server->initNetwork";
191  if (!d->mMessageServer->initNetwork (port)) {
192  kError (11001) << "Unable to bind to port" << port << "!";
193  // no need to delete - we just cannot listen to the port
194 // delete d->mMessageServer;
195 // d->mMessageServer = 0;
196 // d->mMessageClient->setServer((KMessageServer*)0);
197  return false;
198  }
199  kDebug (11001) << "after Server->initNetwork";
200  tryPublish();
201  return true;
202 }
203 
204 bool KGameNetwork::connectToServer (const QString& host, quint16 port)
205 {
206  if (host.isEmpty()) {
207  kError(11001) << "No hostname given";
208  return false;
209  }
210  if (connectToServer(new KMessageSocket (host, port)))
211  {
212  kDebug(11001) << "connected to" << host << ":" << port;
213  return true;
214  }
215  else
216  {
217  return false;
218  }
219 }
220 
221 bool KGameNetwork::connectToServer (KMessageIO *connection)
222 {
223  // Make sure this is 0
224  d->mDisconnectId = 0;
225 
226  // if (!d->mMessageServer) {
227  // // FIXME: What shall we do here? Probably must stop a running game.
228  // kWarning (11001) << "We are already connected to another server!";
230 
231  if (d->mMessageServer) {
232  // FIXME: What shall we do here? Probably must stop a running game.
233  kWarning(11001) << "we are server but we are trying to connect to another server! "
234  << "make sure that all clients connect to that server! "
235  << "quitting the local server now...";
236  stopServerConnection();
237  d->mMessageClient->setServer((KMessageIO*)0);
238  delete d->mMessageServer;
239  d->mMessageServer = 0;
240  }
241 
242  kDebug(11001) << " about to set server";
243  d->mMessageClient->setServer(connection);
244  emit signalAdminStatusChanged(false); // as we delete the connection above isAdmin() is always false now!
245 
246  // OK: We say that we already have connected, but this isn't so yet!
247  // If the connection cannot be established, it will look as being disconnected
248  // again ("slotConnectionLost" is called).
249  // Shall we differ between these?
250  kDebug(11001) << "connected";
251  return true;
252 }
253 
254 quint16 KGameNetwork::port() const
255 {
256  if (isNetwork()) {
257  if (isOfferingConnections()) {
258  return d->mMessageServer->serverPort();
259  } else {
260  return d->mMessageClient->peerPort();
261  }
262  }
263  return 0;
264 }
265 
266 QString KGameNetwork::hostName() const
267 {
268  return d->mMessageClient->peerName();
269 }
270 
271 bool KGameNetwork::stopServerConnection()
272 {
273  // We still are the Master, we just don't accept further connections!
274  tryStopPublishing();
275  if (d->mMessageServer) {
276  d->mMessageServer->stopNetwork();
277  return true;
278  }
279  return false;
280 }
281 
282 bool KGameNetwork::isOfferingConnections() const
283 { return (d->mMessageServer && d->mMessageServer->isOfferingConnections()); }
284 
285 void KGameNetwork::disconnect()
286 {
287  // TODO MH
288  kDebug(11001) ;
289  stopServerConnection();
290  if (d->mMessageServer) {
291  QList <quint32> list=d->mMessageServer->clientIDs();
292  QList<quint32>::Iterator it;
293  for( it = list.begin(); it != list.end(); ++it )
294  {
295  kDebug(11001) << "Client id=" << (*it);
296  KMessageIO *client=d->mMessageServer->findClient(*it);
297  if (!client)
298  {
299  continue;
300  }
301  kDebug(11001) << " rtti=" << client->rtti();
302  if (client->rtti()==2)
303  {
304  kDebug(11001) << "DIRECT IO";
305  }
306  else
307  {
308  d->mMessageServer->removeClient(client,false);
309  }
310  }
311  }
312  else
313  {
314  kDebug(11001) << "before client->disconnect() id="<<gameId();
315  //d->mMessageClient->setServer((KMessageIO*)0);
316  kDebug(11001) << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++";
317  d->mMessageClient->disconnect();
318 
319  kDebug(11001) << "++++++--------------------------------------------+++++";
320  }
321  //setMaster();
322  /*
323  if (d->mMessageServer) {
324  //delete d->mMessageServer;
325  //d->mMessageServer=0;
326  server=true;
327  kDebug(11001) << " server true";
328  d->mMessageServer->deleteClients();
329  kDebug(11001) << " server deleteClients";
330  }
331  */
332  kDebug(11001) << "DONE";
333 }
334 
335 void KGameNetwork::aboutToLoseConnection(quint32 clientID)
336 {
337  kDebug(11001) << "Storing client id of connection "<<clientID;
338  d->mDisconnectId = clientID;
339 }
340 
341 void KGameNetwork::slotResetConnection()
342 {
343  kDebug(11001) << "Resseting client disconnect id";
344  d->mDisconnectId = 0;
345 }
346 
347 void KGameNetwork::electAdmin(quint32 clientID)
348 {
349  if (!isAdmin()) {
350  kWarning(11001) << "only ADMIN is allowed to call this!";
351  return;
352  }
353  QByteArray buffer;
354  QDataStream stream(&buffer,QIODevice::WriteOnly);
355  stream << static_cast<quint32>( KMessageServer::REQ_ADMIN_CHANGE );
356  stream << clientID;
357  d->mMessageClient->sendServerMessage(buffer);
358 }
359 
360 void KGameNetwork::setMaxClients(int max)
361 {
362  if (!isAdmin()) {
363  kWarning(11001) << "only ADMIN is allowed to call this!";
364  return;
365  }
366  QByteArray buffer;
367  QDataStream stream(&buffer,QIODevice::WriteOnly);
368  stream << static_cast<quint32>( KMessageServer::REQ_MAX_NUM_CLIENTS );
369  stream << (qint32)max;
370  d->mMessageClient->sendServerMessage(buffer);
371 }
372 
373 void KGameNetwork::lock()
374 {
375  if (messageClient()) {
376  messageClient()->lock();
377  }
378 }
379 
380 void KGameNetwork::unlock()
381 {
382  if (messageClient()) {
383  messageClient()->unlock();
384  }
385 }
386 
387 // --------------------- send messages ---------------------------
388 
389 bool KGameNetwork::sendSystemMessage(int data, int msgid, quint32 receiver, quint32 sender)
390 {
391  QByteArray buffer;
392  QDataStream stream(&buffer,QIODevice::WriteOnly);
393  stream << data;
394  return sendSystemMessage(buffer,msgid,receiver,sender);
395 }
396 
397 bool KGameNetwork::sendSystemMessage(const QString &msg, int msgid, quint32 receiver, quint32 sender)
398 {
399  QByteArray buffer;
400  QDataStream stream(&buffer, QIODevice::WriteOnly);
401  stream << msg;
402  return sendSystemMessage(buffer, msgid, receiver, sender);
403 }
404 
405 bool KGameNetwork::sendSystemMessage(const QDataStream &msg, int msgid, quint32 receiver, quint32 sender)
406 { return sendSystemMessage(((QBuffer*)msg.device())->buffer(), msgid, receiver, sender); }
407 
408 bool KGameNetwork::sendSystemMessage(const QByteArray& data, int msgid, quint32 receiver, quint32 sender)
409 {
410  QByteArray buffer;
411  QDataStream stream(&buffer,QIODevice::WriteOnly);
412  if (!sender) {
413  sender = gameId();
414  }
415 
416  quint32 receiverClient = KGameMessage::rawGameId(receiver); // KGame::gameId()
417  int receiverPlayer = KGameMessage::rawPlayerId(receiver); // KPlayer::id()
418 
419  KGameMessage::createHeader(stream, sender, receiver, msgid);
420  stream.writeRawData(data.data(), data.size());
421 
422  /*
423  kDebug(11001) << "transmitGameClientMessage msgid=" << msgid << "recv="
424  << receiver << "sender=" << sender << "Buffersize="
425  << buffer.size();
426  */
427 
428  if (!d->mMessageClient) {
429  // No client created, this should never happen!
430  // Having a local game means we have our own
431  // KMessageServer and we are the only client.
432  kWarning (11001) << "We don't have a client! Should never happen!";
433  return false;
434  }
435 
436  if (receiverClient == 0 || receiverPlayer != 0)
437  {
438  // if receiverClient == 0 this is a broadcast message. if it is != 0 but
439  // receiverPlayer is also != 0 we have to send broadcast anyway, because the
440  // KPlayer object on all clients needs to receive the message.
441  d->mMessageClient->sendBroadcast(buffer);
442  }
443  else
444  {
445  d->mMessageClient->sendForward(buffer, receiverClient);
446  }
447  return true;
448 }
449 
450 bool KGameNetwork::sendMessage(int data, int msgid, quint32 receiver, quint32 sender)
451 { return sendSystemMessage(data,msgid+KGameMessage::IdUser,receiver,sender); }
452 
453 bool KGameNetwork::sendMessage(const QString &msg, int msgid, quint32 receiver, quint32 sender)
454 { return sendSystemMessage(msg,msgid+KGameMessage::IdUser,receiver,sender); }
455 
456 bool KGameNetwork::sendMessage(const QDataStream &msg, int msgid, quint32 receiver, quint32 sender)
457 { return sendSystemMessage(msg, msgid+KGameMessage::IdUser, receiver, sender); }
458 
459 bool KGameNetwork::sendMessage(const QByteArray &msg, int msgid, quint32 receiver, quint32 sender)
460 { return sendSystemMessage(msg, msgid+KGameMessage::IdUser, receiver, sender); }
461 
462 void KGameNetwork::sendError(int error,const QByteArray& message, quint32 receiver, quint32 sender)
463 {
464  QByteArray buffer;
465  QDataStream stream(&buffer,QIODevice::WriteOnly);
466  stream << (qint32) error;
467  stream.writeRawData(message.data(), message.size());
468  sendSystemMessage(stream,KGameMessage::IdError,receiver,sender);
469 }
470 
471 
472 // ----------------- receive messages from the network
473 void KGameNetwork::receiveNetworkTransmission(const QByteArray& receiveBuffer, quint32 clientID)
474 {
475  QDataStream stream(receiveBuffer);
476  int msgid;
477  quint32 sender; // the id of the KGame/KPlayer who sent the message
478  quint32 receiver; // the id of the KGame/KPlayer the message is for
479  KGameMessage::extractHeader(stream, sender, receiver, msgid);
480 // kDebug(11001) << "id=" << msgid << "sender=" << sender << "recv=" << receiver;
481 
482  // No broadcast : receiver==0
483  // No player isPlayer(receiver)
484  // Different game gameId()!=receiver
485  if (receiver && receiver!=gameId() && !KGameMessage::isPlayer(receiver) )
486  {
487  // receiver=0 is broadcast or player message
488  kDebug(11001) << "Message not meant for us "
489  << gameId() << "!=" << receiver << "rawid="
490  << KGameMessage::rawGameId(receiver);
491  return;
492  }
493  else if (msgid==KGameMessage::IdError)
494  {
495  QString text;
496  qint32 error;
497  stream >> error;
498  kDebug(11001) << "Got IdError" << error;
499  text = KGameError::errorText(error, stream);
500  kDebug(11001) << "Error text:" << text.toLatin1();
501  emit signalNetworkErrorMessage((int)error,text);
502  }
503  else
504  {
505  networkTransmission(stream, msgid, receiver, sender, clientID);
506  }
507 }
508 
509 // -------------- slots for the signals of the client
510 void KGameNetwork::slotAdminStatusChanged(bool isAdmin)
511 {
512  emit signalAdminStatusChanged(isAdmin);
513 
514 // TODO: I'm pretty sure there are a lot of things that should be done here...
515 }
516 
517 void KGameNetwork::Debug()
518 {
519  kDebug(11001) << "------------------- KNETWORKGAME -------------------------";
520  kDebug(11001) << "gameId " << gameId();
521  kDebug(11001) << "gameMaster " << isMaster();
522  kDebug(11001) << "gameAdmin " << isAdmin();
523  kDebug(11001) << "---------------------------------------------------";
524 }
525 
526 /*
527  * vim: et sw=2
528  */
KGameNetwork::aboutToLoseConnection
void aboutToLoseConnection(quint32 id)
Called when the network connection is about to terminate.
Definition: kgamenetwork.cpp:335
KGameNetwork::messageServer
KMessageServer * messageServer() const
Don't use this unless you really know what you are doing! You might experience some strange behaviour...
Definition: kgamenetwork.cpp:110
KGameNetwork::sendMessage
bool sendMessage(const QByteArray &buffer, int msgid, quint32 receiver=0, quint32 sender=0)
Send a network message msg with a given message ID msgid to all clients.
Definition: kgamenetwork.cpp:459
KGameNetwork::isNetwork
bool isNetwork() const
Definition: kgamenetwork.cpp:83
KGameNetwork::signalConnectionBroken
void signalConnectionBroken()
Our connection to the KMessageServer has broken.
KGameMessage::IdUser
Definition: kgamemessage.h:169
KMessageSocket
This class implements the message communication using a TCP/IP socket.
Definition: kmessageio.h:170
QByteArray
KGameNetwork::sendError
void sendError(int error, const QByteArray &message, quint32 receiver=0, quint32 sender=0)
Sends a network message.
Definition: kgamenetwork.cpp:462
KGameNetwork::signalClientConnected
void signalClientConnected(quint32 clientID)
This signal is emitted whenever the KMessageServer sends us a message that a new client connected...
QDataStream
QObject::sender
QObject * sender() const
KGameMessage::isPlayer
static bool isPlayer(quint32 id)
Checks whether a message receiver/sender is a player.
Definition: kgamemessage.cpp:45
KGameNetwork::setDiscoveryInfo
void setDiscoveryInfo(const QString &type, const QString &name=QString())
Definition: kgamenetwork.cpp:150
KMessageIO::rtti
virtual int rtti() const
The runtime idendifcation.
Definition: kmessageio.h:75
KGameNetwork::signalAdminStatusChanged
void signalAdminStatusChanged(bool isAdmin)
This client gets or loses the admin status.
QBuffer
KGameNetwork::stopServerConnection
bool stopServerConnection()
Stops offering server connections - only for game MASTER.
Definition: kgamenetwork.cpp:271
kgamenetwork.h
KGameError::errorText
static QString errorText(int errorCode, QDataStream &message)
Create an erorr text using a QDataStream (QByteArray) which was created using KGameError.
Definition: kgameerror.cpp:50
KGameNetwork::cookie
int cookie() const
Application cookie.
Definition: kgamenetwork.cpp:98
KGameNetwork::~KGameNetwork
virtual ~KGameNetwork()
Definition: kgamenetwork.cpp:74
kmessageserver.h
KGameNetwork::lock
virtual void lock()
You should call this before doing thigs like, e.g.
Definition: kgamenetwork.cpp:373
KMessageServer::REQ_ADMIN_CHANGE
Definition: kmessageserver.h:188
KGameNetwork::connectToServer
bool connectToServer(const QString &host, quint16 port)
Inits a network game as a network CLIENT.
Definition: kgamenetwork.cpp:204
QObject::name
const char * name() const
KGameMessage::createHeader
static void createHeader(QDataStream &msg, quint32 sender, quint32 receiver, int msgid)
Creates a message header given cookie,sender,receiver,...
Definition: kgamemessage.cpp:60
KMessageClient
A client to connect to a KMessageServer.
Definition: kmessageclient.h:52
QObject
KGameNetwork::isMaster
bool isMaster() const
Is this the game MASTER (i.e.
Definition: kgamenetwork.cpp:101
QString::isEmpty
bool isEmpty() const
KMessageIO
This abstract base class represents one end of a message connections between two clients.
Definition: kmessageio.h:57
KGameNetwork::electAdmin
void electAdmin(quint32 clientID)
If you are the ADMIN of the game you can give the ADMIN status away to another client.
Definition: kgamenetwork.cpp:347
KMessageServer
A server for message sending and broadcasting, using TCP/IP connections.
Definition: kmessageserver.h:175
KMessageServer::REQ_MAX_NUM_CLIENTS
Definition: kmessageserver.h:190
KGameNetwork::messageClient
KMessageClient * messageClient() const
Don't use this unless you really know what youre doing! You might experience some strange behaviour i...
Definition: kgamenetwork.cpp:107
QString
QList< quint32 >
KGameNetwork::port
quint16 port() const
Definition: kgamenetwork.cpp:254
kgamemessage.h
KGameNetwork::isOfferingConnections
bool isOfferingConnections() const
Are we still offer offering server connections - only for game MASTER.
Definition: kgamenetwork.cpp:282
KGameNetwork::hostName
QString hostName() const
Definition: kgamenetwork.cpp:266
QList::end
iterator end()
KGameNetwork::isAdmin
bool isAdmin() const
The admin of a game is the one who initializes newly connected clients using negotiateNetworkGame and...
Definition: kgamenetwork.cpp:104
KGameNetwork::offerConnections
bool offerConnections(quint16 port)
Inits a network game as network MASTER.
Definition: kgamenetwork.cpp:174
KGameNetwork::signalNetworkErrorMessage
void signalNetworkErrorMessage(int error, QString text)
A network error occurred.
KGameNetwork::networkTransmission
virtual void networkTransmission(QDataStream &, int, quint32, quint32, quint32 clientID)=0
Called by ReceiveNetworkTransmission().
KGameNetwork::unlock
virtual void unlock()
Definition: kgamenetwork.cpp:380
KGameNetwork::setMaxClients
void setMaxClients(int max)
Changes the maximal connection number of the KMessageServer to max.
Definition: kgamenetwork.cpp:360
KGameNetwork::KGameNetwork
KGameNetwork(int cookie=42, QObject *parent=0)
Create a KGameNetwork object.
Definition: kgamenetwork.cpp:61
KMessageClient::lock
void lock()
Once this function is called no message will be received anymore.
Definition: kmessageclient.cpp:356
QString::toLatin1
QByteArray toLatin1() const
KGameNetwork::receiveNetworkTransmission
void receiveNetworkTransmission(const QByteArray &a, quint32 clientID)
Called by KMessageClient::broadcastReceived() and will check if the message format is valid...
Definition: kgamenetwork.cpp:473
KGameMessage::IdError
Definition: kgamemessage.h:161
KGameMessage::rawGameId
static quint32 rawGameId(quint32 playerid)
Returns the raw game id, that is, the game id the player belongs to.
Definition: kgamemessage.cpp:40
KGameNetwork::disconnect
void disconnect()
Disconnect the current connection and establish a new local one.
Definition: kgamenetwork.cpp:285
QDataStream::writeRawData
int writeRawData(const char *s, int len)
KGameNetwork::gameId
quint32 gameId() const
The unique ID of this game.
Definition: kgamenetwork.cpp:86
QByteArray::data
char * data()
KMessageClient::unlock
void unlock()
Deliver every message that was delayed by lock() and actually deliver all messages that get received ...
Definition: kmessageclient.cpp:361
kmessageio.h
KGameNetwork::slotResetConnection
void slotResetConnection()
Called when the network connection is terminated.
Definition: kgamenetwork.cpp:341
QDataStream::device
QIODevice * device() const
KGameNetwork::Debug
virtual void Debug()
Gives debug output of the game status.
Definition: kgamenetwork.cpp:517
QByteArray::size
int size() const
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
KGameNetwork::sendSystemMessage
bool sendSystemMessage(const QByteArray &buffer, int msgid, quint32 receiver=0, quint32 sender=0)
Sends a network message msg with a given msg id msgid to all clients.
Definition: kgamenetwork.cpp:408
KGameMessage::extractHeader
static void extractHeader(QDataStream &msg, quint32 &sender, quint32 &receiver, int &msgid)
Retrieves the information like cookie,sender,receiver,...
Definition: kgamemessage.cpp:65
KGameMessage::rawPlayerId
static int rawPlayerId(quint32 playerid)
Returns the raw playerid, that is, a id which does not contain the game number encoded in it...
Definition: kgamemessage.cpp:35
kgameerror.h
kmessageclient.h
KGameNetwork::signalClientDisconnected
void signalClientDisconnected(quint32 clientID, bool broken)
This signal is emitted whenever the KMessageServer sends us a message that a connection to a client w...
QList::begin
iterator begin()
KGameNetwork::setMaster
void setMaster()
Definition: kgamenetwork.cpp:114
KGameNetwork::slotAdminStatusChanged
void slotAdminStatusChanged(bool isAdmin)
This KGame object receives or loses the admin status.
Definition: kgamenetwork.cpp:510
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:18:54 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

libkdegames/libkdegamesprivate/kgame

Skip menu "libkdegames/libkdegamesprivate/kgame"
  • Main Page
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdegames API Reference

Skip menu "kdegames API Reference"
  • granatier
  • kapman
  • kblackbox
  • kgoldrunner
  • kigo
  • kmahjongg
  • KShisen
  • ksquares
  • libkdegames
  •   highscore
  •   libkdegamesprivate
  •     kgame
  • libkmahjongg
  • palapeli
  •   libpala

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal