diff options
Diffstat (limited to 'libkdegames/kgame/kgameprocess.h')
-rw-r--r-- | libkdegames/kgame/kgameprocess.h | 243 |
1 files changed, 0 insertions, 243 deletions
diff --git a/libkdegames/kgame/kgameprocess.h b/libkdegames/kgame/kgameprocess.h deleted file mode 100644 index b7e2d145..00000000 --- a/libkdegames/kgame/kgameprocess.h +++ /dev/null @@ -1,243 +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 __KGAMEPROCESS_H_ -#define __KGAMEPROCESS_H_ - -#include <tqstring.h> -#include <tqobject.h> -#include <tqfile.h> - -#include "kgameproperty.h" -#include <krandomsequence.h> -#include <kdemacros.h> -class KPlayer; -class KMessageFilePipe; - -/** - * This is the process class used on the computer player - * side to communicate with its counterpart KProcessIO class. - * Using these two classes will give fully transparent communication - * via TQDataStreams. - */ -class KDE_EXPORT KGameProcess: public TQObject -{ - Q_OBJECT - TQ_OBJECT - - public: - /** - * Creates a KGameProcess class. Done only in the computer - * player. To activate the communication you have to call - * the exec function of this class which will listen - * to the communication and emit signals to notify you of - * any incoming messages. - * Note: This function will only return after you set - * setTerminate(true) in one of the received signals. - * So you can not do any computer calculation after the exec function. - * Instead you react on the signals which are emitted after a - * message is received and perform the calculations there! - * Example: - * \code - * int main(int argc ,char * argv[]) - * { - * KGameProcess proc; - * connect(&proc,TQT_SIGNAL(signalCommand(TQDataStream &,int ,int ,int )), - * this,TQT_SLOT(slotCommand(TQDataStream & ,int ,int ,int ))); - * connect(&proc,TQT_SIGNAL(signalInit(TQDataStream &,int)), - * this,TQT_SLOT(slotInit(TQDataStream & ,int ))); - * connect(&proc,TQT_SIGNAL(signalTurn(TQDataStream &,bool )), - * this,TQT_SLOT(slotTurn(TQDataStream & ,bool ))); - * return proc.exec(argc,argv); - * } - * \endcode - */ - KGameProcess(); - /** - * Destruct the process - */ - ~KGameProcess(); - - /** - * Enters the event loop of the computer process. Does only - * return on setTerminate(true)! - */ - bool exec(int argc, char *argv[]); - - /** - * Should the computer process leave its exec function? - * Activated if you setTerminate(true); - * - * @return true/false - */ - bool terminate() const {return mTerminate;} - - /** - * Set this to true if the computer process should end, ie - * leave its exec function. - * - * @param b true for exit the exec function - */ - void setTerminate(bool b) {mTerminate=b;} - - /** - * Sends a message to the corresponding KGameIO - * device. Works like the sendSystemMessage but - * for user id's - * - * @param stream the TQDataStream containing the message - * @param msgid the message id for the message - * @param receiver unused - */ - void sendMessage(TQDataStream &stream,int msgid,TQ_UINT32 receiver=0); - - /** - * Sends a system message to the corresonding KGameIO device. - * This will normally be either a performed move or a query - * (IdProcessQuery). The query option is a way to communicate - * with the KGameIO at the other side and e.g. retrieve some - * game relevant data from here. - * Exmaple for a query: - * \code - * TQByteArray buffer; - * TQDataStream out(buffer,IO_WriteOnly); - * int msgid=KGameMessage::IdProcessQuery; - * out << (int)1; - * proc.sendSystemMessage(out,msgid,0); - * \endcode - * - * @param stream the TQDataStream containing the message - * @param msgid the message id for the message - * @param receiver unused - */ - void sendSystemMessage(TQDataStream &stream,int msgid,TQ_UINT32 receiver=0); - - /** - * Returns a pointer to a KRandomSequence. You can generate - * random numbers via e.g. - * \code - * random()->getLong(100); - * \endcode - * - * @return KRandomSequence pointer - */ - KRandomSequence *random() {return mRandom;} - - protected: - /** - * processes the command line argumens to set up the computer player - * Pass the argumens exactely as given by main() - */ - void processArgs(int argc, char *argv[]); - - protected slots: - /** - * A message is received via the interprocess connection. The - * appropriate signals are called. - */ - void receivedMessage(const TQByteArray& receiveBuffer); - - signals: - /** - * The generic communication signal. You have to connect to this - * signal to generate a valid computer response onto arbitrary messages. - * All signals but IdIOAdded and IdTurn end up here! - * Example: - * \code - * void Computer::slotCommand(int &msgid,TQDataStream &in,TQDataStream &out) - * { - * TQ_INT32 data,move; - * in >> data; - * // compute move ... - * move=data*2; - * out << move; - * } - * \endcode - * - * @param inputStream the incoming data stream - * @param msgid the message id of the message which got transmitted to the computer - * @param receiver the id of the receiver - * @param sender the id of the sender - */ - void signalCommand(TQDataStream &inputStream,int msgid,int receiver,int sender); - - /** - * This signal is emmited if the computer player should perform a turn. - * Calculations can be made here and the move can then be send back with - * sendSystemMessage with the message id KGameMessage::IdPlayerInput. - * These must provide a move which complies to your other move syntax as - * e.g. produces by keyboard or mouse input. - * Additonal data which have been written into the stream from the - * ProcessIO's signal signalPrepareTurn can be retrieved from the - * stream here. - * Example: - * \code - * void slotTurn(TQDataStream &in,bool turn) - * { - * int id; - * int recv; - * TQByteArray buffer; - * TQDataStream out(buffer,IO_WriteOnly); - * if (turn) - * { - * // Create a move - the format is yours to decide - * // It arrives exactly as this in the kgame inputMove function!! - * TQ_INT8 x1,y1,pl; - * pl=-1; - * x1=proc.random()->getLong(8); - * y1=proc.random()->getLong(8); - * // Stream it - * out << pl << x1 << y1; - * id=KGameMessage::IdPlayerInput; - * proc.sendSystemMessage(out,id,0); - * } - * } - * \endcode - * - * @param stream The datastream which contains user data - * @param turn True or false whether the turn is activated or deactivated - * - */ - void signalTurn(TQDataStream &stream,bool turn); - - /** - * This signal is emmited when the process is initialized, i.e. added - * to a KPlayer. Initial initialisation can be performed here be reacting - * to the KProcessIO signal signalIOAdded and retrieving the data here - * from the stream. - * It works just as the signalTurn() but is only send when the player is - * added to the game, i.e. it needs some initialization data - * - * @param stream The datastream which contains user data - * @param userid The userId of the player. (Careful to rely on it yet) - */ - void signalInit(TQDataStream &stream,int userid); - - protected: - bool mTerminate; - KMessageFilePipe *mMessageIO; - private: - TQFile rFile; - TQFile wFile; - KRandomSequence* mRandom; -}; -#endif |