source: trunk/synergy/lib/arch/CArch.cpp@ 2751

Last change on this file since 2751 was 2749, checked in by bird, 19 years ago

synergy v1.3.1 sources (zip).

File size: 10.6 KB
Line 
1/*
2 * synergy -- mouse and keyboard sharing utility
3 * Copyright (C) 2002 Chris Schoeneman
4 *
5 * This package is free software you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * found in the file COPYING that should have accompanied this file.
8 *
9 * This package is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 */
14
15#include "common.h"
16#include "CArch.h"
17
18#undef ARCH_CONSOLE
19#undef ARCH_DAEMON
20#undef ARCH_FILE
21#undef ARCH_LOG
22#undef ARCH_MULTITHREAD
23#undef ARCH_NETWORK
24#undef ARCH_SLEEP
25#undef ARCH_STRING
26#undef ARCH_SYSTEM
27#undef ARCH_TASKBAR
28#undef ARCH_TIME
29
30// include appropriate architecture implementation
31#if SYSAPI_WIN32
32# include "CArchConsoleWindows.h"
33# include "CArchDaemonWindows.h"
34# include "CArchFileWindows.h"
35# include "CArchLogWindows.h"
36# include "CArchMiscWindows.h"
37# include "CArchMultithreadWindows.h"
38# include "CArchNetworkWinsock.h"
39# include "CArchSleepWindows.h"
40# include "CArchStringWindows.h"
41# include "CArchSystemWindows.h"
42# include "CArchTaskBarWindows.h"
43# include "CArchTimeWindows.h"
44#elif SYSAPI_UNIX
45# include "CArchConsoleUnix.h"
46# include "CArchDaemonUnix.h"
47# include "CArchFileUnix.h"
48# include "CArchLogUnix.h"
49# if HAVE_PTHREAD
50# include "CArchMultithreadPosix.h"
51# endif
52# include "CArchNetworkBSD.h"
53# include "CArchSleepUnix.h"
54# include "CArchStringUnix.h"
55# include "CArchSystemUnix.h"
56# include "CArchTaskBarXWindows.h"
57# include "CArchTimeUnix.h"
58#endif
59
60#if !defined(ARCH_CONSOLE)
61# error unsupported platform for console
62#endif
63
64#if !defined(ARCH_DAEMON)
65# error unsupported platform for daemon
66#endif
67
68#if !defined(ARCH_FILE)
69# error unsupported platform for file
70#endif
71
72#if !defined(ARCH_LOG)
73# error unsupported platform for logging
74#endif
75
76#if !defined(ARCH_MULTITHREAD)
77# error unsupported platform for multithreading
78#endif
79
80#if !defined(ARCH_NETWORK)
81# error unsupported platform for network
82#endif
83
84#if !defined(ARCH_SLEEP)
85# error unsupported platform for sleep
86#endif
87
88#if !defined(ARCH_STRING)
89# error unsupported platform for string
90#endif
91
92#if !defined(ARCH_SYSTEM)
93# error unsupported platform for system
94#endif
95
96#if !defined(ARCH_TASKBAR)
97# error unsupported platform for taskbar
98#endif
99
100#if !defined(ARCH_TIME)
101# error unsupported platform for time
102#endif
103
104//
105// CArch
106//
107
108CArch* CArch::s_instance = NULL;
109
110CArch::CArch(ARCH_ARGS* args)
111{
112 // only once instance of CArch
113 assert(s_instance == NULL);
114 s_instance = this;
115
116 // create architecture implementation objects
117 m_mt = new ARCH_MULTITHREAD;
118 m_system = new ARCH_SYSTEM;
119 m_file = new ARCH_FILE;
120 m_log = new ARCH_LOG;
121 m_net = new ARCH_NETWORK;
122 m_sleep = new ARCH_SLEEP;
123 m_string = new ARCH_STRING;
124 m_time = new ARCH_TIME;
125 m_console = new ARCH_CONSOLE(args);
126 m_daemon = new ARCH_DAEMON;
127 m_taskbar = new ARCH_TASKBAR(args);
128
129#if SYSAPI_WIN32
130 CArchMiscWindows::init();
131#endif
132}
133
134CArch::~CArch()
135{
136 // clean up
137 delete m_taskbar;
138 delete m_daemon;
139 delete m_console;
140 delete m_time;
141 delete m_string;
142 delete m_sleep;
143 delete m_net;
144 delete m_log;
145 delete m_file;
146 delete m_system;
147 delete m_mt;
148
149 // no instance
150 s_instance = NULL;
151}
152
153CArch*
154CArch::getInstance()
155{
156 assert(s_instance != NULL);
157
158 return s_instance;
159}
160
161void
162CArch::openConsole(const char* title)
163{
164 m_console->openConsole(title);
165}
166
167void
168CArch::closeConsole()
169{
170 m_console->closeConsole();
171}
172
173void
174CArch::showConsole(bool showIfEmpty)
175{
176 m_console->showConsole(showIfEmpty);
177}
178
179void
180CArch::writeConsole(const char* str)
181{
182 m_console->writeConsole(str);
183}
184
185const char*
186CArch::getNewlineForConsole()
187{
188 return m_console->getNewlineForConsole();
189}
190
191void
192CArch::installDaemon(const char* name,
193 const char* description,
194 const char* pathname,
195 const char* commandLine,
196 const char* dependencies,
197 bool allUsers)
198{
199 m_daemon->installDaemon(name, description, pathname,
200 commandLine, dependencies, allUsers);
201}
202
203void
204CArch::uninstallDaemon(const char* name, bool allUsers)
205{
206 m_daemon->uninstallDaemon(name, allUsers);
207}
208
209int
210CArch::daemonize(const char* name, DaemonFunc func)
211{
212 return m_daemon->daemonize(name, func);
213}
214
215bool
216CArch::canInstallDaemon(const char* name, bool allUsers)
217{
218 return m_daemon->canInstallDaemon(name, allUsers);
219}
220
221bool
222CArch::isDaemonInstalled(const char* name, bool allUsers)
223{
224 return m_daemon->isDaemonInstalled(name, allUsers);
225}
226
227const char*
228CArch::getBasename(const char* pathname)
229{
230 return m_file->getBasename(pathname);
231}
232
233std::string
234CArch::getUserDirectory()
235{
236 return m_file->getUserDirectory();
237}
238
239std::string
240CArch::getSystemDirectory()
241{
242 return m_file->getSystemDirectory();
243}
244
245std::string
246CArch::concatPath(const std::string& prefix, const std::string& suffix)
247{
248 return m_file->concatPath(prefix, suffix);
249}
250
251void
252CArch::openLog(const char* name)
253{
254 m_log->openLog(name);
255}
256
257void
258CArch::closeLog()
259{
260 m_log->closeLog();
261}
262
263void
264CArch::showLog(bool showIfEmpty)
265{
266 m_log->showLog(showIfEmpty);
267}
268
269void
270CArch::writeLog(ELevel level, const char* msg)
271{
272 m_log->writeLog(level, msg);
273}
274
275CArchCond
276CArch::newCondVar()
277{
278 return m_mt->newCondVar();
279}
280
281void
282CArch::closeCondVar(CArchCond cond)
283{
284 m_mt->closeCondVar(cond);
285}
286
287void
288CArch::signalCondVar(CArchCond cond)
289{
290 m_mt->signalCondVar(cond);
291}
292
293void
294CArch::broadcastCondVar(CArchCond cond)
295{
296 m_mt->broadcastCondVar(cond);
297}
298
299bool
300CArch::waitCondVar(CArchCond cond, CArchMutex mutex, double timeout)
301{
302 return m_mt->waitCondVar(cond, mutex, timeout);
303}
304
305CArchMutex
306CArch::newMutex()
307{
308 return m_mt->newMutex();
309}
310
311void
312CArch::closeMutex(CArchMutex mutex)
313{
314 m_mt->closeMutex(mutex);
315}
316
317void
318CArch::lockMutex(CArchMutex mutex)
319{
320 m_mt->lockMutex(mutex);
321}
322
323void
324CArch::unlockMutex(CArchMutex mutex)
325{
326 m_mt->unlockMutex(mutex);
327}
328
329CArchThread
330CArch::newThread(ThreadFunc func, void* data)
331{
332 return m_mt->newThread(func, data);
333}
334
335CArchThread
336CArch::newCurrentThread()
337{
338 return m_mt->newCurrentThread();
339}
340
341CArchThread
342CArch::copyThread(CArchThread thread)
343{
344 return m_mt->copyThread(thread);
345}
346
347void
348CArch::closeThread(CArchThread thread)
349{
350 m_mt->closeThread(thread);
351}
352
353void
354CArch::cancelThread(CArchThread thread)
355{
356 m_mt->cancelThread(thread);
357}
358
359void
360CArch::setPriorityOfThread(CArchThread thread, int n)
361{
362 m_mt->setPriorityOfThread(thread, n);
363}
364
365void
366CArch::testCancelThread()
367{
368 m_mt->testCancelThread();
369}
370
371bool
372CArch::wait(CArchThread thread, double timeout)
373{
374 return m_mt->wait(thread, timeout);
375}
376
377bool
378CArch::isSameThread(CArchThread thread1, CArchThread thread2)
379{
380 return m_mt->isSameThread(thread1, thread2);
381}
382
383bool
384CArch::isExitedThread(CArchThread thread)
385{
386 return m_mt->isExitedThread(thread);
387}
388
389void*
390CArch::getResultOfThread(CArchThread thread)
391{
392 return m_mt->getResultOfThread(thread);
393}
394
395IArchMultithread::ThreadID
396CArch::getIDOfThread(CArchThread thread)
397{
398 return m_mt->getIDOfThread(thread);
399}
400
401void
402CArch::setSignalHandler(ESignal signal, SignalFunc func, void* userData)
403{
404 m_mt->setSignalHandler(signal, func, userData);
405}
406
407void
408CArch::raiseSignal(ESignal signal)
409{
410 m_mt->raiseSignal(signal);
411}
412
413CArchSocket
414CArch::newSocket(EAddressFamily family, ESocketType type)
415{
416 return m_net->newSocket(family, type);
417}
418
419CArchSocket
420CArch::copySocket(CArchSocket s)
421{
422 return m_net->copySocket(s);
423}
424
425void
426CArch::closeSocket(CArchSocket s)
427{
428 m_net->closeSocket(s);
429}
430
431void
432CArch::closeSocketForRead(CArchSocket s)
433{
434 m_net->closeSocketForRead(s);
435}
436
437void
438CArch::closeSocketForWrite(CArchSocket s)
439{
440 m_net->closeSocketForWrite(s);
441}
442
443void
444CArch::bindSocket(CArchSocket s, CArchNetAddress addr)
445{
446 m_net->bindSocket(s, addr);
447}
448
449void
450CArch::listenOnSocket(CArchSocket s)
451{
452 m_net->listenOnSocket(s);
453}
454
455CArchSocket
456CArch::acceptSocket(CArchSocket s, CArchNetAddress* addr)
457{
458 return m_net->acceptSocket(s, addr);
459}
460
461bool
462CArch::connectSocket(CArchSocket s, CArchNetAddress name)
463{
464 return m_net->connectSocket(s, name);
465}
466
467int
468CArch::pollSocket(CPollEntry pe[], int num, double timeout)
469{
470 return m_net->pollSocket(pe, num, timeout);
471}
472
473void
474CArch::unblockPollSocket(CArchThread thread)
475{
476 m_net->unblockPollSocket(thread);
477}
478
479size_t
480CArch::readSocket(CArchSocket s, void* buf, size_t len)
481{
482 return m_net->readSocket(s, buf, len);
483}
484
485size_t
486CArch::writeSocket(CArchSocket s, const void* buf, size_t len)
487{
488 return m_net->writeSocket(s, buf, len);
489}
490
491void
492CArch::throwErrorOnSocket(CArchSocket s)
493{
494 m_net->throwErrorOnSocket(s);
495}
496
497bool
498CArch::setNoDelayOnSocket(CArchSocket s, bool noDelay)
499{
500 return m_net->setNoDelayOnSocket(s, noDelay);
501}
502
503bool
504CArch::setReuseAddrOnSocket(CArchSocket s, bool reuse)
505{
506 return m_net->setReuseAddrOnSocket(s, reuse);
507}
508
509std::string
510CArch::getHostName()
511{
512 return m_net->getHostName();
513}
514
515CArchNetAddress
516CArch::newAnyAddr(EAddressFamily family)
517{
518 return m_net->newAnyAddr(family);
519}
520
521CArchNetAddress
522CArch::copyAddr(CArchNetAddress addr)
523{
524 return m_net->copyAddr(addr);
525}
526
527CArchNetAddress
528CArch::nameToAddr(const std::string& name)
529{
530 return m_net->nameToAddr(name);
531}
532
533void
534CArch::closeAddr(CArchNetAddress addr)
535{
536 m_net->closeAddr(addr);
537}
538
539std::string
540CArch::addrToName(CArchNetAddress addr)
541{
542 return m_net->addrToName(addr);
543}
544
545std::string
546CArch::addrToString(CArchNetAddress addr)
547{
548 return m_net->addrToString(addr);
549}
550
551IArchNetwork::EAddressFamily
552CArch::getAddrFamily(CArchNetAddress addr)
553{
554 return m_net->getAddrFamily(addr);
555}
556
557void
558CArch::setAddrPort(CArchNetAddress addr, int port)
559{
560 m_net->setAddrPort(addr, port);
561}
562
563int
564CArch::getAddrPort(CArchNetAddress addr)
565{
566 return m_net->getAddrPort(addr);
567}
568
569bool
570CArch::isAnyAddr(CArchNetAddress addr)
571{
572 return m_net->isAnyAddr(addr);
573}
574
575bool
576CArch::isEqualAddr(CArchNetAddress a, CArchNetAddress b)
577{
578 return m_net->isEqualAddr(a, b);
579}
580
581void
582CArch::sleep(double timeout)
583{
584 m_sleep->sleep(timeout);
585}
586
587int
588CArch::vsnprintf(char* str, int size, const char* fmt, va_list ap)
589{
590 return m_string->vsnprintf(str, size, fmt, ap);
591}
592
593int
594CArch::convStringMBToWC(wchar_t* dst, const char* src, UInt32 n, bool* errors)
595{
596 return m_string->convStringMBToWC(dst, src, n, errors);
597}
598
599int
600CArch::convStringWCToMB(char* dst, const wchar_t* src, UInt32 n, bool* errors)
601{
602 return m_string->convStringWCToMB(dst, src, n, errors);
603}
604
605IArchString::EWideCharEncoding
606CArch::getWideCharEncoding()
607{
608 return m_string->getWideCharEncoding();
609}
610
611std::string
612CArch::getOSName() const
613{
614 return m_system->getOSName();
615}
616
617void
618CArch::addReceiver(IArchTaskBarReceiver* receiver)
619{
620 m_taskbar->addReceiver(receiver);
621}
622
623void
624CArch::removeReceiver(IArchTaskBarReceiver* receiver)
625{
626 m_taskbar->removeReceiver(receiver);
627}
628
629void
630CArch::updateReceiver(IArchTaskBarReceiver* receiver)
631{
632 m_taskbar->updateReceiver(receiver);
633}
634
635double
636CArch::time()
637{
638 return m_time->time();
639}
Note: See TracBrowser for help on using the repository browser.