summaryrefslogtreecommitdiffstats
path: root/libkdegames/kgame/kgamenetwork.h
diff options
context:
space:
mode:
Diffstat (limited to 'libkdegames/kgame/kgamenetwork.h')
-rw-r--r--libkdegames/kgame/kgamenetwork.h432
1 files changed, 0 insertions, 432 deletions
diff --git a/libkdegames/kgame/kgamenetwork.h b/libkdegames/kgame/kgamenetwork.h
deleted file mode 100644
index b5975ffc..00000000
--- a/libkdegames/kgame/kgamenetwork.h
+++ /dev/null
@@ -1,432 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Martin Heni ([email protected])
- Copyright (C) 2001 Andreas Beckermann ([email protected])
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/*
- $Id$
-*/
-#ifndef __KGAMENETWORK_H_
-#define __KGAMENETWORK_H_
-
-#include <tqstring.h>
-#include <tqobject.h>
-#include <kdemacros.h>
-class KGameIO;
-class KMessageClient;
-class KMessageServer;
-
-class KGameNetworkPrivate;
-
-/**
- * The KGameNetwork class is the KGame class with network
- * support. All other features are the same but they are
- * now network transparent. It is not used directly but
- * only via a KGame object. So you do not really have
- * to bother with this object.
- *
- * @short The main KDE game object
- * @author Martin Heni <[email protected]>
- * @version $Id$
- */
-class KDE_EXPORT KGameNetwork : public TQObject
-{
- Q_OBJECT
- TQ_OBJECT
-
-public:
- /**
- * Create a KGameNetwork object
- */
- KGameNetwork(int cookie=42,TQObject* parent=0);
- virtual ~KGameNetwork();
-
- /**
- * Gives debug output of the game status
- **/
- virtual void Debug();
-
- /**
- * @return TRUE if this is a network game - i.e. you are either MASTER or
- * connected to a remote MASTER.
- **/
- bool isNetwork() const;
-
- /**
- * Is this the game MASTER (i.e. has started theKMessageServer). A
- * game has always exactly one MASTER. This is either a KGame object (i.e. a
- * Client) or an own MessageServer-process. A KGame object that has the
- * MASTER status is always admin.
- *
- * You probably don't want to use this. It is a mostly internal method which
- * will probably become protected. Better use isAdmin
- *
- * @see isAdmin
- * @return Whether this client has started the KMessageServer
- **/
- bool isMaster() const;
-
- /**
- * The admin of a game is the one who initializes newly connected clients
- * using negotiateNetworkGame and is allowed to configure the game.
- * E.g. only the admin is allowed to use KGame::setMaxPlayers.
- *
- * If one KGame object in the game is MASTER then this client is the admin
- * as well. isMaster and isAdmin differ only if the KMessageServer
- * is running in an own process.
- * @return Whether this client (KGame object) is the admin
- **/
- bool isAdmin() const;
-
- /**
- * The unique ID of this game
- *
- * @return int id
- **/
- TQ_UINT32 gameId() const;
-
- /**
- * Inits a network game as network MASTER. Note that if the
- * KMessageServer is not yet started it will be started here (see
- * setMaster). Any existing connection will be disconnected.
- *
- * If you already offer connections the port is changed.
- *
- * @param port The port on which the service is offered
- * @return true if it worked
- **/
- bool offerConnections (TQ_UINT16 port);
-
- /**
- * Announces game MASTER on network using DNS-SD. Clients then can discover it using
- * DNSSD::ServiceBrowser (or KGameConnectWidget) instead of manually entering
- * IP address.
- * @param type service type (something like _kwin4._tcp).
- * It should be unique for application.
- * @param name game name that will be displayed by clients. If not
- * set hostname will be used. In case of name conflict -2, -3 and so on will be added to name.
- * @since 3.4
- **/
- void setDiscoveryInfo(const TQString& type, const TQString& name=TQString());
-
- /**
- * Inits a network game as a network CLIENT
- *
- * @param host the host to which we want to connect
- * @param port the port we want to connect to
- *
- * @return true if connected
- **/
- bool connectToServer(const TQString& host, TQ_UINT16 port);
-
- /**
- * @since 3.2
- * @return The port we are listening to if offerConnections was called
- * or the port we are connected to if connectToServer was called.
- * Otherwise 0.
- **/
- TQ_UINT16 port() const;
-
- /**
- * @since 3.2
- * @return The name of the host that we are currently connected to is
- * isNetwork is TRUE and we are not the MASTER, i.e. if connectToServer
- * was called. Otherwise this will return "localhost".
- **/
- TQString hostName() const;
-
- /**
- * Stops offering server connections - only for game MASTER
- * @return true
- **/
- bool stopServerConnection();
-
- /**
- * Changes the maximal connection number of the KMessageServer to max.
- * -1 Means infinite connections are possible. Note that existing
- * connections are not affected, so even if you set this to 0 in a running
- * game no client is being disconnected. You can call this only if you are
- * the ADMIN!
- *
- * @see KMessageServer::setMaxClients
- * @param max The maximal number of connections possible.
- **/
- void setMaxClients(int max);
-
- //AB: is this now internal only? Can we make it protected (maybe with
- //friends)? sendSystemMessage AND sendMessage is very confusing to the
- //user.
- /**
- * Sends a network message msg with a given msg id msgid to all clients.
- * Use this to communicate with KGame (e.g. to add a player ot to configure
- * the game - usually not necessary).
- *
- * For your own messages use sendMessage instead! This is mostly
- * internal!
- *
- * @param buffer the message which will be send. See messages.txt for contents
- * @param msgid an id for this message. See
- * KGameMessage::GameMessageIds
- * @param receiver the KGame / KPlayer this message is for.
- * @param sender The KGame / KPlayer this message is from (i.e.
- * you). You
- * probably want to leave this 0, then KGameNetwork will create the correct
- * value for you. You might want to use this if you send a message from a
- * specific player.
- * @return true if worked
- */
- // AB: TODO: doc on how "receiver" and "sender" should be created!
- bool sendSystemMessage(const TQByteArray& buffer, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
- /**
- * @overload
- **/
- bool sendSystemMessage(int data, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
- /**
- * @overload
- **/
- bool sendSystemMessage(const TQDataStream &msg, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
- /**
- * @overload
- **/
- bool sendSystemMessage(const TQString& msg, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
- /**
- * Sends a network message
- * @param error The error code
- * @param message The error message - use KGameError
- * @param receiver the KGame / KPlayer this message is for. 0 For
- * all
- * @param sender The KGame / KPlayer this message is from (i.e.
- * you). You probably want to leave this 0, then KGameNetwork will create
- * the correct value for you. You might want to use this if you send a
- * message from a specific player.
- **/
- void sendError(int error, const TQByteArray& message, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
- /**
- * Are we still offer offering server connections - only for game MASTER
- * @return true/false
- **/
- bool isOfferingConnections() const;
-
- /**
- * Application cookie. this idendifies the game application. It
- * help to distinguish between e.g. KPoker and KWin4
- * @return the application cookie
- **/
- int cookie() const;
-
- /**
- * Send a network message msg with a given message ID msgid to all clients.
- * You want to use this to send a message to the clients.
- *
- * Note that a message is always sent to ALL clients! This is necessary so
- * that all clients always have the same data and can easily be changed from
- * network to non-network without restarting the game. If you want a
- * specific KGame / KPlayer to react to the message use the
- * receiver and sender parameters. See KGameMessage::calsMessageId
- *
- * SendMessage differs from sendSystemMessage only by the msgid parameter.
- * sendSystemMessage is thought as a KGame only mehtod while
- * sendMessage is for public use. The msgid parameter will be
- * +=KGameMessage::IdUser and in KGame::signalNetworkData msgid will
- * be -= KGameMessage::IdUser again, so that one can easily distinguish
- * between system and user messages.
- *
- * Use sendSystemMessage to comunicate with KGame (e.g. by adding a
- * player) and sendMessage for your own user message.
- *
- * Note: a player should send messages through a KGameIO!
- *
- * @param buffer the message which will be send. See messages.txt for contents
- * @param msgid an id for this message. See KGameMessage::GameMessageIds
- * @param receiver the KGame / KPlayer this message is for.
- * @param sender The KGame / KPlayer this message is from (i.e.
- * you). You
- * probably want to leave this 0, then KGameNetwork will create the correct
- * value for you. You might want to use this if you send a message from a
- * specific player.
- * @return true if worked
- **/
- // AB: TODO: doc on how "receiver" and "sender" should be created!
- bool sendMessage(const TQByteArray& buffer, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
- /**
- * This is an overloaded member function, provided for convenience.
- **/
- bool sendMessage(const TQDataStream &msg, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
- /**
- * This is an overloaded member function, provided for convenience.
- **/
- bool sendMessage(const TQString& msg, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
- /**
- * This is an overloaded member function, provided for convenience.
- **/
- bool sendMessage(int data, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
-
- /**
- * Called by ReceiveNetworkTransmission(). Will be overwritten by
- * KGame and handle the incoming message.
- **/
- virtual void networkTransmission(TQDataStream&, int, TQ_UINT32, TQ_UINT32, TQ_UINT32 clientID) = 0;
-
-
- /**
- * Disconnect the current connection and establish a new local one.
- **/
- void disconnect();
-
-
- /**
- * If you are the ADMIN of the game you can give the ADMIN status away to
- * another client. Use this e.g. if you want to quit the game or if you want
- * another client to administrate the game (note that disconnect calls
- * this automatically).
- * @param clientID the ID of the new ADMIN (note: this is the _client_ID
- * which has nothing to do with the player IDs. See KMessageServer)
- **/
- void electAdmin(TQ_UINT32 clientID);
-
- /**
- * Don't use this unless you really know what youre doing! You might
- * experience some strange behaviour if you send your messages directly
- * through the KMessageClient!
- *
- * @return a pointer to the KMessageClient used internally to send the
- * messages. You should rather use one of the send functions!
- **/
- KMessageClient* messageClient() const;
-
- /**
- * Don't use this unless you really know what you are doing! You might
- * experience some strange behaviour if you use the message server directly!
- *
- * @return a pointer to the message server if this is the MASTER KGame
- * object. Note that it might be possible that no KGame object contains
- * the KMessageServer at all! It might even run stand alone!
- **/
- KMessageServer* messageServer() const;
-
- /**
- * You should call this before doing thigs like, e.g. tqApp->processEvents().
- * Don't forget to call unlock once you are done!
- *
- * @see KMessageClient::lock
- **/
- virtual void lock();
-
- /**
- * @see KMessageClient::unlock
- **/
- virtual void unlock();
-
-signals:
- /**
- * A network error occurred
- * @param error the error code
- * @param text the error text
- */
- void signalNetworkErrorMessage(int error, TQString text);
-
- /**
- * Our connection to the KMessageServer has broken.
- * See KMessageClient::connectionBroken
- **/
- void signalConnectionBroken();
-
- /**
- * This signal is emitted whenever the KMessageServer sends us a message that a
- * new client connected. KGame uses this to call KGame::negotiateNetworkGame
- * for the newly connected client if we are admin (see isAdmin)
- *
- * @see KMessageClient::eventClientConnected
- *
- * @param clientID the ID of the newly connected client
- **/
- void signalClientConnected(TQ_UINT32 clientID);
-
- /**
- * This signal is emitted whenever the KMessageServer sends us a message
- * that a connection to a client was detached. The second parameter can be used
- * to distinguish between network errors or removing on purpose.
- *
- * @see KMessageClient::eventClientDisconnected
- *
- * @param clientID the client that has disconnected
- * @param broken true if the connection was lost because of a network error, false
- * if the connection was closed by the message server admin.
- */
- void signalClientDisconnected(TQ_UINT32 clientID, bool broken);
-
- /**
- * This client gets or loses the admin status.
- * @see KMessageClient::adminStatusChanged
- * @param isAdmin True if this client gets the ADMIN status otherwise FALSE
- **/
- void signalAdminStatusChanged(bool isAdmin);
-
-protected:
- /**
- * @internal
- * Start a KMessageServer object and use it as the MASTER of the game.
- * Note that you must not call this if there is already another master
- * running!
- **/
- void setMaster();
-
-protected slots:
- /**
- * Called by KMessageClient::broadcastReceived() and will check if the
- * message format is valid. If it is not, it will generate an error (see
- * signalNetworkVersionError and signalNetworkErorrMessage).
- * If it is valid, the pure virtual method networkTransmission() is called.
- * (This one is overwritten in KGame.)
- **/
- void receiveNetworkTransmission(const TQByteArray& a, TQ_UINT32 clientID);
-
- /**
- * This KGame object receives or loses the admin status.
- * @param isAdmin Whether we are admin or not
- **/
- void slotAdminStatusChanged(bool isAdmin);
-
- /**
- * Called when the network connection is about to terminate. Is used
- * to store the network parameter like the game id
- */
- void aboutToLoseConnection(TQ_UINT32 id);
-
- /**
- * Called when the network connection is terminated. Used to clean
- * up the disconnect parameter
- */
- void slotResetConnection();
-
-
-private:
- void tryPublish();
- void tryStopPublishing();
- KGameNetworkPrivate* d;
-};
-
-#endif