LTSKlient.cpp 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424
  1. #include "LTSKlient.h"
  2. #include <iostream>
  3. // Inhalt der LTSKlient Klasse aus LTSKlient.h
  4. // Konstruktor
  5. LTSKlient::LTSKlient( const char *ip, int port )
  6. : ReferenceCounter()
  7. {
  8. k = new SSLKlient();
  9. fehler = new Text( "Keine Verbindung zum Server." );
  10. this->ip = new Text( ip );
  11. this->port = port;
  12. verbunden = 0;
  13. eingeloggt = 0;
  14. InitializeCriticalSection( &cs );
  15. }
  16. // Destruktor
  17. LTSKlient::~LTSKlient()
  18. {
  19. if( verbunden )
  20. trenne();
  21. k->release();
  22. ip->release();
  23. fehler->release();
  24. DeleteCriticalSection( &cs );
  25. }
  26. // nicht constant
  27. void LTSKlient::lock()
  28. {
  29. EnterCriticalSection( &cs );
  30. }
  31. void LTSKlient::unlock()
  32. {
  33. LeaveCriticalSection( &cs );
  34. }
  35. bool LTSKlient::verbinden()
  36. {
  37. if( verbunden )
  38. return 1;
  39. lock();
  40. std::cout << "connect to " << ip->getText() << ":" << port << "\n";
  41. bool b = k->verbinde( port, ip->getText() );
  42. if( !b )
  43. {
  44. fehler->setText( "Fehler beim verbinden mit dem Server.\nPort:" );
  45. fehler->append( port );
  46. fehler->append( " IP:" );
  47. fehler->append( ip->getText() );
  48. }
  49. verbunden = b;
  50. eingeloggt = 0;
  51. unlock();
  52. return b;
  53. }
  54. bool LTSKlient::login( const char *name, const char *passwort )
  55. {
  56. if( !verbunden )
  57. verbinden();
  58. if( !verbunden )
  59. return 0;
  60. lock();
  61. k->sende( "\1", 1 );
  62. unsigned char res = 0;
  63. k->getNachricht( (char *)&res, 1 );
  64. if( res == 1 )
  65. {
  66. unsigned char län = (unsigned char)textLength( name );
  67. k->sende( (char *)&län, 1 );
  68. if( län )
  69. k->sende( name, län );
  70. län = (unsigned char)textLength( passwort );
  71. k->sende( (char *)&län, 1 );
  72. if( län )
  73. k->sende( passwort, län );
  74. k->getNachricht( (char *)&res, 1 );
  75. }
  76. if( res == 3 )
  77. {
  78. k->getNachricht( (char *)&res, 1 );
  79. char *txt = new char[ res + 1 ];
  80. k->getNachricht( txt, res );
  81. txt[ res ] = 0;
  82. fehler->setText( "Fehler während login beim Server.\nServer Rückgabe:" );
  83. fehler->append( txt );
  84. delete[] txt;
  85. }
  86. else
  87. {
  88. eingeloggt = 1;
  89. unlock();
  90. return 1;
  91. }
  92. unlock();
  93. return 0;
  94. }
  95. bool LTSKlient::logout()
  96. {
  97. if( !verbunden )
  98. verbinden();
  99. if( !verbunden )
  100. return 0;
  101. lock();
  102. k->sende( "\2", 1 );
  103. unsigned char res = 0;
  104. k->getNachricht( (char *)&res, 1 );
  105. if( res == 3 )
  106. {
  107. k->getNachricht( (char *)&res, 1 );
  108. char *txt = new char[ res + 1 ];
  109. k->getNachricht( txt, res );
  110. txt[ res ] = 0;
  111. fehler->setText( "Fehler während logout beim Server.\nServer Rückgabe:" );
  112. fehler->append( txt );
  113. delete[] txt;
  114. }
  115. unlock();
  116. return res == 1;
  117. }
  118. int LTSKlient::getStatus()
  119. {
  120. if( !verbunden )
  121. verbinden();
  122. if( !verbunden )
  123. return -1;
  124. lock();
  125. k->sende( "\x8", 1 );
  126. unsigned char res = 0;
  127. k->getNachricht( (char *)&res, 1 );
  128. int status = 0;
  129. if( res == 1 )
  130. {
  131. k->getNachricht( (char *)&res, 1 );
  132. if( res == 1 )
  133. status = 1;
  134. }
  135. else if( res == 3 )
  136. {
  137. status = -2;
  138. k->getNachricht( (char *)&res, 1 );
  139. char *txt = new char[ res + 1 ];
  140. k->getNachricht( txt, res );
  141. txt[ res ] = 0;
  142. fehler->setText( "Fehler während Status Request beim Server.\nServer Rückgabe:" );
  143. fehler->append( txt );
  144. delete[] txt;
  145. }
  146. unlock();
  147. return (int)res;
  148. }
  149. bool LTSKlient::stop()
  150. {
  151. if( !verbunden )
  152. verbinden();
  153. if( !verbunden )
  154. return 0;
  155. lock();
  156. k->sende( "\5", 1 );
  157. unsigned char res = 0;
  158. k->getNachricht( (char *)&res, 1 );
  159. if( res == 3 )
  160. {
  161. k->getNachricht( (char *)&res, 1 );
  162. char *txt = new char[ res + 1 ];
  163. k->getNachricht( txt, res );
  164. txt[ res ] = 0;
  165. fehler->setText( "Fehler während Stoppen beim Server.\nServer Rückgabe:" );
  166. fehler->append( txt );
  167. delete[] txt;
  168. }
  169. unlock();
  170. return res == 1;
  171. }
  172. bool LTSKlient::pause()
  173. {
  174. if( !verbunden )
  175. verbinden();
  176. if( !verbunden )
  177. return 0;
  178. lock();
  179. k->sende( "\x9", 1 );
  180. unsigned char res = 0;
  181. k->getNachricht( (char *)&res, 1 );
  182. if( res == 3 )
  183. {
  184. k->getNachricht( (char *)&res, 1 );
  185. char *txt = new char[ res + 1 ];
  186. k->getNachricht( txt, res );
  187. txt[ res ] = 0;
  188. fehler->setText( "Fehler während Pausieren beim Server.\nServer Rückgabe:" );
  189. fehler->append( txt );
  190. delete[] txt;
  191. }
  192. k->sende( "\1", 1 );
  193. k->getNachricht( (char *)&res, 1 );
  194. if( res == 3 )
  195. {
  196. k->getNachricht( (char *)&res, 1 );
  197. char *txt = new char[ res + 1 ];
  198. k->getNachricht( txt, res );
  199. txt[ res ] = 0;
  200. fehler->setText( "Fehler während Pausieren beim Server.\nServer Rückgabe:" );
  201. fehler->append( txt );
  202. delete[] txt;
  203. }
  204. unlock();
  205. return res == 1;
  206. }
  207. bool LTSKlient::fortsetzen()
  208. {
  209. if( !verbunden )
  210. verbinden();
  211. if( !verbunden )
  212. return 0;
  213. lock();
  214. k->sende( "\x9", 1 );
  215. unsigned char res = 0;
  216. k->getNachricht( (char *)&res, 1 );
  217. if( res == 3 )
  218. {
  219. k->getNachricht( (char *)&res, 1 );
  220. char *txt = new char[ res + 1 ];
  221. k->getNachricht( txt, res );
  222. txt[ res ] = 0;
  223. fehler->setText( "Fehler während Fortsetzen beim Server.\nServer Rückgabe:" );
  224. fehler->append( txt );
  225. delete[] txt;
  226. }
  227. k->sende( "\0", 1 );
  228. k->getNachricht( (char *)&res, 1 );
  229. if( res == 3 )
  230. {
  231. k->getNachricht( (char *)&res, 1 );
  232. char *txt = new char[ res + 1 ];
  233. k->getNachricht( txt, res );
  234. txt[ res ] = 0;
  235. fehler->setText( "Fehler während Fortsetzen beim Server.\nServer Rückgabe:" );
  236. fehler->append( txt );
  237. delete[] txt;
  238. }
  239. unlock();
  240. return res == 1;
  241. }
  242. bool LTSKlient::start()
  243. {
  244. if( !verbunden )
  245. verbinden();
  246. if( !verbunden )
  247. return 0;
  248. lock();
  249. k->sende( "\4", 1 );
  250. unsigned char res = 0;
  251. k->getNachricht( (char *)&res, 1 );
  252. if( res == 3 )
  253. {
  254. k->getNachricht( (char *)&res, 1 );
  255. char *txt = new char[ res + 1 ];
  256. k->getNachricht( txt, res );
  257. txt[ res ] = 0;
  258. fehler->setText( "Fehler während Starten beim Server.\nServer Rückgabe:" );
  259. fehler->append( txt );
  260. delete[] txt;
  261. }
  262. unlock();
  263. return res == 1;
  264. }
  265. bool LTSKlient::setMaxTasks( int maxC )
  266. {
  267. if( !verbunden )
  268. verbinden();
  269. if( !verbunden )
  270. return 0;
  271. lock();
  272. k->sende( "\xA", 1 );
  273. unsigned char res = 0;
  274. k->getNachricht( (char *)&res, 1 );
  275. if( res == 3 )
  276. {
  277. k->getNachricht( (char *)&res, 1 );
  278. char *txt = new char[ res + 1 ];
  279. k->getNachricht( txt, res );
  280. txt[ res ] = 0;
  281. fehler->setText( "Fehler während SetMaxClients beim Server.\nServer Rückgabe:" );
  282. fehler->append( txt );
  283. delete[] txt;
  284. }
  285. k->sende( (char *)&maxC, 4 );
  286. k->getNachricht( (char *)&res, 1 );
  287. if( res == 3 )
  288. {
  289. k->getNachricht( (char *)&res, 1 );
  290. char *txt = new char[ res + 1 ];
  291. k->getNachricht( txt, res );
  292. txt[ res ] = 0;
  293. fehler->setText( "Fehler während SetMaxClients beim Server.\nServer Rückgabe:" );
  294. fehler->append( txt );
  295. delete[] txt;
  296. }
  297. unlock();
  298. return res == 1;
  299. }
  300. bool LTSKlient::beenden()
  301. {
  302. if( !verbunden )
  303. verbinden();
  304. if( !verbunden )
  305. return 0;
  306. lock();
  307. k->sende( "\6", 1 );
  308. unsigned char res = 0;
  309. k->getNachricht( (char *)&res, 1 );
  310. if( res == 3 )
  311. {
  312. k->getNachricht( (char *)&res, 1 );
  313. char *txt = new char[ res + 1 ];
  314. k->getNachricht( txt, res );
  315. txt[ res ] = 0;
  316. fehler->setText( "Fehler während Beenden beim Server.\nServer Rückgabe:" );
  317. fehler->append( txt );
  318. delete[] txt;
  319. }
  320. unlock();
  321. if( res == 1 )
  322. {
  323. eingeloggt = 0;
  324. verbunden = 0;
  325. }
  326. return res == 1;
  327. }
  328. bool LTSKlient::terminieren()
  329. {
  330. if( !verbunden )
  331. verbinden();
  332. if( !verbunden )
  333. return 0;
  334. lock();
  335. k->sende( "\7", 1 );
  336. unsigned char res = 0;
  337. k->getNachricht( (char *)&res, 1 );
  338. if( res == 3 )
  339. {
  340. k->getNachricht( (char *)&res, 1 );
  341. char *txt = new char[ res + 1 ];
  342. k->getNachricht( txt, res );
  343. txt[ res ] = 0;
  344. fehler->setText( "Fehler während Terminieren beim Server.\nServer Rückgabe:" );
  345. fehler->append( txt );
  346. delete[] txt;
  347. }
  348. unlock();
  349. if( res == 1 )
  350. {
  351. eingeloggt = 0;
  352. verbunden = 0;
  353. }
  354. return res == 1;
  355. }
  356. bool LTSKlient::trenne()
  357. {
  358. if( !verbunden )
  359. return 1;
  360. lock();
  361. k->sende( "\3", 1 );
  362. unsigned char res = 0;
  363. k->getNachricht( (char *)&res, 1 );
  364. if( res == 3 )
  365. {
  366. k->getNachricht( (char *)&res, 1 );
  367. char *txt = new char[ res + 1 ];
  368. k->getNachricht( txt, res );
  369. txt[ res ] = 0;
  370. fehler->setText( "Fehler während Trennen beim Server.\nServer Rückgabe:" );
  371. fehler->append( txt );
  372. delete[] txt;
  373. }
  374. unlock();
  375. eingeloggt = 0;
  376. verbunden = 0;
  377. k->trenne();
  378. return res == 1;
  379. }
  380. void LTSKlient::abbruch()
  381. {
  382. if( verbunden )
  383. k->trenne();
  384. eingeloggt = 0;
  385. verbunden = 0;
  386. }
  387. // constant
  388. bool LTSKlient::istVerbunden() const
  389. {
  390. return verbunden;
  391. }
  392. bool LTSKlient::istEingeloggt() const
  393. {
  394. return eingeloggt;
  395. }
  396. const char *LTSKlient::getLetzterFehler() const
  397. {
  398. return fehler->getText();
  399. }
  400. SSLKlient *LTSKlient::zKlient() const
  401. {
  402. return k;
  403. }