infocenterserver.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #include "infocenterserver.h"
  2. InfoCenterServer::InfoCenterServer(QObject *parent) : QTcpServer(parent)
  3. {
  4. clientList.clear();
  5. }
  6. void InfoCenterServer::start()
  7. {
  8. if(!listen(QHostAddress::Any,6002)){
  9. printf("listen 6002 failed\n");
  10. this->appendData("listen 6002 failed");
  11. exit(1);
  12. }else{
  13. printf("listen on 6002\n");
  14. this->appendData("listen on 6002");
  15. }
  16. }
  17. void InfoCenterServer::incomingConnection(qintptr socketDescriptor)
  18. {
  19. printf("new incoming\n");
  20. this->appendData("incomingConnection");
  21. InfoClient *client = new InfoClient(socketDescriptor,this);
  22. clientList.append(client);
  23. connect(client,&InfoClient::write_error,this,&InfoCenterServer::write_error);
  24. connect(client,&InfoClient::sendlog,this,&InfoCenterServer::receivelog);
  25. connect(client,&InfoClient::finished,client,&InfoClient::quit);
  26. client->start();
  27. }
  28. void InfoCenterServer::receivelog(QString recelog)
  29. {
  30. this->appendData(recelog);
  31. }
  32. void InfoCenterServer::appendData(QString emitlog)
  33. {
  34. emit weblog(emitlog);
  35. }
  36. void InfoCenterServer::write_error()
  37. {
  38. this->appendData("enter into InfoCenterServer::write_error()");
  39. InfoClient *pClient = qobject_cast<InfoClient *>(sender());
  40. QList<InfoClient *>::iterator i;
  41. for(i=clientList.begin();i!=clientList.end();i++){
  42. InfoClient *client = *i;
  43. if(client==pClient){
  44. clientList.removeAll(client);
  45. client->deleteLater();
  46. }
  47. }
  48. }