EditorKlient.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #include "EditorKlient.h"
  2. #include <Klient.h>
  3. using namespace Network;
  4. // Inhalt der EditorKlient Klasse aus EditorKlient.h
  5. // Konstruktor
  6. // k: Der zu verwendende Klient
  7. EditorKlient::EditorKlient( EditorKlientV *k )
  8. {
  9. klient = k;
  10. ref = 1;
  11. }
  12. // Destruktor
  13. EditorKlient::~EditorKlient()
  14. {
  15. klient->release();
  16. }
  17. // Initialisiert den Server
  18. // return: 1, falls erfolgreich
  19. // 2, falls bereits eine Sitzung existiert
  20. // 0, sonnst
  21. int EditorKlient::init()
  22. {
  23. klient->lock();
  24. error = "";
  25. Klient *k = klient->zKlient();
  26. k->sendeEncrypted( "\x7", 1 );
  27. char ret = 0;
  28. k->getNachrichtEncrypted( &ret, 1 );
  29. if( ret == 1 )
  30. {
  31. k->sendeEncrypted( "\xF", 1 );
  32. k->getNachrichtEncrypted( &ret, 1 );
  33. if( ret == 1 )
  34. {
  35. k->sendeEncrypted( "\x0", 1 );
  36. k->getNachrichtEncrypted( &ret, 1 );
  37. if( ret == 1 )
  38. {
  39. k->getNachrichtEncrypted( &ret, 1 );
  40. return ret;
  41. }
  42. }
  43. }
  44. if( ret == 3 )
  45. {
  46. char l = 0;
  47. k->getNachrichtEncrypted( &l, 1 );
  48. char *err = new char[ l + 1 ];
  49. err[ l ] = 0;
  50. k->getNachrichtEncrypted( err, l );
  51. error = err;
  52. delete[] err;
  53. ret = 0;
  54. }
  55. klient->unlock();
  56. return ret;
  57. }
  58. // Verwirft die vorhandene Sitzung und erstellt eine neue
  59. bool EditorKlient::sitzungVerwerfen()
  60. {
  61. klient->lock();
  62. error = "";
  63. Klient *k = klient->zKlient();
  64. k->sendeEncrypted( "\x7", 1 );
  65. char ret = 0;
  66. k->getNachrichtEncrypted( &ret, 1 );
  67. if( ret == 1 )
  68. {
  69. k->sendeEncrypted( "\xF", 1 );
  70. k->getNachrichtEncrypted( &ret, 1 );
  71. if( ret == 1 )
  72. {
  73. k->sendeEncrypted( "\x1", 1 );
  74. k->getNachrichtEncrypted( &ret, 1 );
  75. }
  76. }
  77. if( ret == 3 )
  78. {
  79. char l = 0;
  80. k->getNachrichtEncrypted( &l, 1 );
  81. char *err = new char[ l + 1 ];
  82. err[ l ] = 0;
  83. k->getNachrichtEncrypted( err, l );
  84. error = err;
  85. delete[] err;
  86. ret = 0;
  87. }
  88. klient->unlock();
  89. return ret == 1;
  90. }
  91. // Gibt den Letzten Fehler zurück
  92. char *EditorKlient::getLastError() const
  93. {
  94. return error;
  95. }
  96. // Reference Counting
  97. EditorKlient *EditorKlient::getThis()
  98. {
  99. ref++;
  100. return this;
  101. }
  102. EditorKlient *EditorKlient::release()
  103. {
  104. if( !--ref )
  105. delete this;
  106. return 0;
  107. }