FactoryClient.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include "FactoryClient.h"
  2. using namespace Network;
  3. FactoryClient::FactoryClient()
  4. {
  5. client = 0;
  6. connected = 0;
  7. reader = 0;
  8. }
  9. FactoryClient::~FactoryClient()
  10. {
  11. if( client )
  12. disconnect();
  13. }
  14. bool FactoryClient::connect( Text ip, short port, int accountId, Text secret )
  15. {
  16. if( client )
  17. {
  18. disconnect();
  19. client = new SSLKlient();
  20. }
  21. if( !client->verbinde( port, ip ) )
  22. return false;
  23. connected = 1;
  24. if( !client->sende( "\1", 1 ) )
  25. return false;
  26. if( !client->sende( (char *)&accountId, 4 ) )
  27. return false;
  28. unsigned char len = (unsigned char)secret.getLength();
  29. if( !client->sende( (char *)&len, 1 ) )
  30. return false;
  31. if( !client->sende( secret, len ) )
  32. return false;
  33. char result = 0;
  34. if( !client->getNachricht( &result, 1 ) || result != 1 )
  35. return false;
  36. reader = new NetworkReader( client );
  37. return true;
  38. }
  39. void FactoryClient::disconnect()
  40. {
  41. if( client )
  42. {
  43. if( connected )
  44. client->sende( "\2", 1 );
  45. delete reader;
  46. client->trenne();
  47. client->release();
  48. client = 0;
  49. }
  50. }
  51. NetworkReader *FactoryClient::getNextMessage()
  52. {
  53. if( !client )
  54. return 0;
  55. if( !client->hatNachricht( 0 ) )
  56. return 0;
  57. char type = 0;
  58. if( !client->getNachricht( &type, 1 ) )
  59. return 0;
  60. if( type == 1 )
  61. {
  62. client->trenne();
  63. client->release();
  64. client = 0;
  65. return 0;
  66. }
  67. if( !client->hatNachricht( 0 ) )
  68. return 0;
  69. return reader;
  70. }