23 #define DCOPSERVER_H "$Id$"
28 #include <tqsocketnotifier.h>
29 #include <tqptrlist.h>
30 #include <tqvaluelist.h>
31 #include <tqcstring.h>
33 #include <tqptrdict.h>
34 #include <tqintdict.h>
35 #include <tqapplication.h>
42 #include <KDE-ICE/ICElib.h>
44 #include <KDE-ICE/ICEutil.h>
45 #include <KDE-ICE/ICEmsg.h>
46 #include <KDE-ICE/ICEproto.h>
51 class DCOPSignalConnectionList;
66 typedef TQValueList<TQCString> QCStringList;
71 class DCOPConnection :
public TQSocketNotifier
74 DCOPConnection( IceConn conn );
77 DCOPSignalConnectionList *signalConnectionList();
81 void waitForOutputReady(
const TQByteArray &_data,
int start);
85 void slotOutputReady();
102 TQPtrList <_IceConn> waitingOnReply;
103 TQPtrList <_IceConn> waitingForReply;
104 TQPtrList <_IceConn> waitingForDelayedReply;
105 DCOPSignalConnectionList *_signalConnectionList;
108 TQValueList <TQByteArray> outputBuffer;
109 unsigned long outputBufferStart;
110 TQSocketNotifier *outputBufferNotifier;
117 class DCOPServer :
public TQObject
121 DCOPServer(
bool _suicide);
124 void* watchConnection( IceConn iceConn );
125 void removeConnection(
void* data );
126 void processMessage( IceConn iceConn,
int opcode,
unsigned long length, Bool swap);
127 void ioError( IceConn iceConn );
129 bool receive(
const TQCString &app,
const TQCString &obj,
130 const TQCString &fun,
const TQByteArray& data,
131 TQCString& replyType, TQByteArray &replyData, IceConn iceConn);
133 DCOPConnection *findApp(
const TQCString &appId);
134 DCOPConnection *findConn(IceConn iceConn)
135 {
return clients.find(iceConn); }
137 void sendMessage(DCOPConnection *conn,
const TQCString &sApp,
138 const TQCString &rApp,
const TQCString &rObj,
139 const TQCString &rFun,
const TQByteArray &data);
142 void newClient(
int socket );
143 void processData(
int socket );
144 void slotTerminate();
148 void slotCleanDeadConnections();
149 void slotOutputReady(
int socket );
153 static BOOL WINAPI dcopServerConsoleProc(DWORD dwCtrlType);
155 static DWORD WINAPI TerminatorThread(
void * pParam);
158 void broadcastApplicationRegistration( DCOPConnection* conn,
const TQCString type,
159 const TQCString& data );
163 int currentClientNumber;
165 DCOPSignals *dcopSignals;
167 TQTimer *m_deadConnectionTimer;
168 TQPtrList<DCOPListener> listener;
169 TQAsciiDict<DCOPConnection> appIds;
170 TQPtrDict<DCOPConnection> clients;
171 TQIntDict<DCOPConnection> fd_clients;
172 TQPtrList<_IceConn> deadConnections;
175 HANDLE m_evTerminate;
176 HANDLE m_hTerminateThread;
177 DWORD m_dwTerminateThreadId;
181 TQTextStream *m_stream;
186 extern DCOPServer* the_server;