12下一页
返回列表 发新帖我要提问本帖赏金: 10.00元(功能说明)

一步一步完善我的设计(5):各个模块编码码

[复制链接]
 楼主| keer_zu 发表于 2016-6-8 11:33 | 显示全部楼层 |阅读模式
本帖最后由 keer_zu 于 2016-6-8 11:58 编辑

以下是各个模块编码:

@yyy71cj @dong_abc @ayb_ice
@Simon21ic   @21ic小喇叭
 楼主| keer_zu 发表于 2016-6-8 11:34 | 显示全部楼层
AddTask.h

  1. #ifndef __ADD_TASK_H__
  2. #define __ADD_TASK_H__
  3. #include <stdio.h>
  4. #include <iostream>
  5. #include <string>
  6. #include <vector>
  7. #include "json/json.h"
  8. #include "InterfaceApi.h"
  9. #include "Disptacher.h"
  10. #include "Log4cxxWrapper.h"
  11. #include "Task.h"


  12. using namespace std;

  13. class CommandDb;


  14. class AddTask
  15. {
  16.         AddTask *next; // 1. "next" pointer in the base class
  17.        
  18. protected:
  19.         vector<string> m_commandNames;
  20.         TaskDb *m_taskDb;
  21.         Disptacher *m_disptacher;
  22.         CommandDb* m_commandDb;

  23. public:
  24.         AddTask();
  25.        
  26.         bool IsThisTaskType(const string cmdName)
  27.         {
  28.                 vector<string>::iterator it;
  29.                
  30.                 for (it = m_commandNames.begin(); it != m_commandNames.end(); ++ it){
  31.                         if(cmdName == *it)
  32.                                 return true;
  33.                 }

  34.                 return false;
  35.         }
  36.         virtual void GetInfo() = 0;

  37.         virtual bool TaskSubmit(Task* task) = 0;
  38.                
  39.         void setNext(AddTask *n)
  40.         {
  41.                 next = n;
  42.         }
  43.         void add(AddTask *n)
  44.         {
  45.                 if (next)
  46.                         next->add(n);
  47.                 else
  48.                         next = n;
  49.         }
  50.         virtual void AddSpacificTask(Json::Value& value,AppServerSession *appServerSion)
  51.         {
  52.                 if(next != NULL)
  53.                         next->AddSpacificTask(value,appServerSion);
  54.                 else {   // this command does not exist;
  55.                         printf("error");
  56.                         // TODO: log
  57.                 }
  58.         }

  59.         Task* BuildBasicTask(Json::Value& value);
  60.        
  61.         bool DoAppResponse(string commandName,AppServerSession *session,Task* task);

  62. };

  63. class AddVideoTask : public AddTask
  64. {
  65.         AddVideoTask();
  66. public:
  67.         virtual void GetInfo(){}
  68.         virtual bool TaskSubmit(Task*);
  69.         static AddVideoTask& GetInstance();
  70.         virtual void AddSpacificTask(Json::Value& value,AppServerSession *appServerSion);       
  71. };

  72. class AddDocTask : public AddTask
  73. {
  74.         AddDocTask();
  75. public:
  76.         virtual void GetInfo(){}
  77.         virtual bool TaskSubmit(Task*);
  78.         static AddDocTask& GetInstance();
  79.         virtual void AddSpacificTask(Json::Value& value,AppServerSession *appServerSion);
  80. };

  81. class AddDpptTask : public AddTask
  82. {
  83.         AddDpptTask();
  84. public:
  85.         virtual void GetInfo(){}
  86.         virtual bool TaskSubmit(Task*);
  87.         static AddDpptTask& GetInstance();
  88.         virtual void AddSpacificTask(Json::Value& value,AppServerSession *appServerSion);
  89. };

  90. class AddNoUseTsTask : public AddTask
  91. {
  92.         AddNoUseTsTask();
  93. public:
  94.         virtual void GetInfo(){}
  95.         virtual bool TaskSubmit(Task*);
  96.         static AddNoUseTsTask& GetInstance();
  97.         virtual void AddSpacificTask(Json::Value& value,AppServerSession *appServerSion);
  98. };

  99. #endif

打赏榜单

21ic小喇叭 打赏了 10.00 元 2016-06-12
理由:分享打赏

 楼主| keer_zu 发表于 2016-6-8 11:35 | 显示全部楼层
AddTask.cpp

  1. #include "AddTask.h"
  2. #include "TsManager.h"
  3. #include "CommandDb.h"
  4. #include "error.h"


  5. using namespace std;
  6. using namespace cdy;

  7. //extern CommandDb GCommandDb;

  8. extern TaskDocumentDb GTaskDocumentDb;
  9. extern TaskVideoDb GTaskVideoDb;
  10. extern TaskDpptDb GTaskDpptDb;
  11. extern TaskNoUseTsDb GTaskNoUseTsDb;


  12. //==========================  AddTask ===========================

  13. AddTask::AddTask()
  14. {
  15.         next = NULL;
  16.         m_commandDb = &CommandDb::GetInstance();//&GCommandDb;
  17. }

  18. Task* AddTask::BuildBasicTask(Json::Value& value)
  19. {
  20.         Task *task;

  21.         task = m_taskDb->GetTask();
  22.                
  23.         if(!value["priority"].isNull() && value["priority"].isIntegral()){
  24.                 task->SetPriority(value["priority"].asInt());
  25.         } else {
  26.                 // TODO: LOG
  27.                 return NULL;
  28.         }

  29.         if(!value["id"].isNull() && value["id"].isString()){
  30.                 task->SetTaskId(value["id"].asString());
  31.         } else {
  32.                 // TODO: LOG
  33.                 return NULL;
  34.         }

  35.         task->Init();
  36.         task->SetCmdValue(value);
  37.         task->SetDisptacher(m_disptacher);
  38.         task->SetCommand(m_commandDb->GetCommand(value["command"].asString()));
  39.        

  40.         if(!value["host"].isNull() && value["host"].isString()){
  41.                 task->m_appTargetIp = value["host"].asString();            
  42.         } else {
  43.                 // TODO: log
  44.                 return NULL;            
  45.         }   

  46.         if(!value["port"].isNull() && value["port"].isIntegral()){
  47.                 task->m_appTargetPort = value["port"].asInt();            
  48.         } else {
  49.                 //dsLog.Log(FALSE,LOGGER_ERROR,"Error message from application client. No port. :%s, [%s][%s][%d]\n",strRecv.c_str(),__FILE__,__PRETTY_FUNCTION__,__LINE__);                                               
  50.                 return NULL;
  51.         }

  52.         return task;
  53. }


  54. bool AddTask::DoAppResponse(string commandName,AppServerSession *session,Task* task)
  55. {
  56.         string msg;
  57.         Command *cmd;
  58.         Json::Value valueAppRes;
  59.         LoggerWrapper dsLog= LoggerWrapper::GetInstance();

  60.         cmd = m_commandDb->GetCommand(commandName);
  61.         if(!cmd)
  62.                 return false;
  63.        
  64.         if(m_disptacher->DuplicateTaskCheck(task->GetTaskId())){
  65.                 cmd->BuildAppResponse(valueAppRes,0,"");
  66.         } else {
  67.                 cmd->BuildAppResponse(valueAppRes,RET_E_REPEATED_TS_TRANS_TASK,"App task message id is repeated!");
  68.                 msg = valueAppRes.toStyledString() + '\0';
  69.                 session->SendMessage(msg);
  70.                 dsLog.Log(true,LOGGER_ERROR,"%s:%s:%d   App task message id is repeated!\n",__FILE__,__PRETTY_FUNCTION__,__LINE__);
  71.                 return false;
  72.         }

  73.         msg = valueAppRes.toStyledString() + '\0';
  74.         session->SendMessage(msg);
  75.        
  76.         return true;
  77. }

  78. //========================  AddVideoTask =========================
  79. AddVideoTask& AddVideoTask::GetInstance()
  80. {
  81.         static  AddVideoTask instance_;
  82.         return instance_;        
  83. }


  84. AddVideoTask::AddVideoTask()
  85. {
  86.         m_commandDb->GetCommandNameInSpecificTaskType(VideoTask,m_commandNames);
  87.        
  88.         m_taskDb = &GTaskVideoDb;
  89.         m_disptacher = &VideoDisptacher::GetInstance();//&GVideoDisptacher;
  90. }

  91. void AddVideoTask::AddSpacificTask(Json::Value& value,AppServerSession *appServerSion)
  92. {
  93.         Task* task;

  94.         if(IsThisTaskType(value["command"].asString())) {
  95.                 task = BuildBasicTask(value);
  96.                 if(!task)
  97.                         return;
  98.                
  99.                 if(!DoAppResponse(value["command"].asString(),appServerSion,task))
  100.                         return;

  101.                 if(!TaskSubmit(task)){
  102.                        
  103.                 }

  104.                 return;
  105.                
  106.         } else {
  107.                 AddTask::AddSpacificTask(value,appServerSion);
  108.         }
  109. }

  110. bool AddVideoTask::TaskSubmit(Task* task)
  111. {
  112.         return m_disptacher->Submit(task);
  113. }





  114. //=========================  AddDocTask ==========================

  115. AddDocTask& AddDocTask::GetInstance()
  116. {
  117.         static  AddDocTask instance_;
  118.         return instance_;        
  119. }

  120. AddDocTask::AddDocTask()
  121. {
  122.         m_commandDb->GetCommandNameInSpecificTaskType(DocTask,m_commandNames);
  123.        
  124.         m_taskDb = &GTaskDocumentDb;

  125.         m_disptacher = &DocDisptacher::GetInstance();//GDocDisptacher;
  126. }

  127. void AddDocTask::AddSpacificTask(Json::Value& value,AppServerSession *appServerSion)
  128. {
  129.         Task* task;
  130.        
  131.         if(IsThisTaskType(value["command"].asString())) {
  132.                 task = BuildBasicTask(value);
  133.                 if(!task)
  134.                         return;

  135.                 TaskDocument* td = dynamic_cast<TaskDocument*>(task);
  136.                
  137.                 if(!value["docServerType"].isNull()){
  138.                         if(value["docServerType"].isString() &&
  139.                                 (value["docServerType"].asString() == "LINUX" ||
  140.                                 value["docServerType"].asString() == "WPS" ||
  141.                                 value["docServerType"].asString() == "OFFICE" )
  142.                         )
  143.                                 td->SetIsSpecific(true);
  144.                         else
  145.                                 td->SetIsSpecific(false);
  146.                 } else {
  147.                         td->SetIsSpecific(false);
  148.                 }
  149.                
  150.                 if(!DoAppResponse(value["command"].asString(),appServerSion,task))
  151.                         return;

  152.                 if(!TaskSubmit(task)){
  153.                        
  154.                 }

  155.                 return;
  156.         } else {
  157.                 AddTask::AddSpacificTask(value,appServerSion);
  158.         }
  159. }

  160. bool AddDocTask::TaskSubmit(Task* task)
  161. {
  162.         return m_disptacher->Submit(task);
  163. }


  164. //========================  AddDpptTask ==========================
  165. AddDpptTask& AddDpptTask::GetInstance()
  166. {
  167.         static  AddDpptTask instance_;
  168.         return instance_;        
  169. }

  170. AddDpptTask::AddDpptTask()
  171. {
  172.         m_commandDb->GetCommandNameInSpecificTaskType(DpptTask,m_commandNames);
  173.        
  174.         m_taskDb = &GTaskDpptDb;

  175.         m_disptacher = &DpptDisptacher::GetInstance();//&GDpptDisptacher;
  176. }

  177. void AddDpptTask::AddSpacificTask(Json::Value& value,AppServerSession *appServerSion)
  178. {
  179.         Task *task;
  180.        
  181.         if(IsThisTaskType(value["command"].asString())){
  182.                 task = BuildBasicTask(value);
  183.                 if(!task)
  184.                         return;
  185.                
  186.                 if(!DoAppResponse(value["command"].asString(),appServerSion,task))
  187.                         return;

  188.                 if(!TaskSubmit(task)){
  189.                        
  190.                 }

  191.                 return;
  192.         } else {
  193.                 AddTask::AddSpacificTask(value,appServerSion);
  194.         }
  195. }

  196. bool AddDpptTask::TaskSubmit(Task* task)
  197. {
  198.         return m_disptacher->Submit(task);
  199. }



  200. //====================== AddNoUseTsTask ===========================
  201. AddNoUseTsTask& AddNoUseTsTask::GetInstance()
  202. {
  203.         static  AddNoUseTsTask instance_;
  204.         return instance_;        
  205. }

  206. AddNoUseTsTask::AddNoUseTsTask()
  207. {
  208.         m_commandDb->GetCommandNameInSpecificTaskType(NoTsTask,m_commandNames);
  209.         m_taskDb = &GTaskNoUseTsDb;
  210.        
  211. }

  212. void AddNoUseTsTask::AddSpacificTask(Json::Value& value,AppServerSession *appServerSion)
  213. {
  214.         Task* task;
  215.        
  216.         if(IsThisTaskType(value["command"].asString())){
  217.                 task = BuildBasicTask(value);
  218.                 if(!task)
  219.                         return;
  220.                
  221.                 if(!DoAppResponse(value["command"].asString(),appServerSion,task))
  222.                         return;

  223.                 if(!TaskSubmit(task)){
  224.                        
  225.                 }

  226.                 return;
  227.         } else {
  228.                 AddTask::AddSpacificTask(value,appServerSion);
  229.         }
  230. }

  231. bool AddNoUseTsTask::TaskSubmit(Task* task)
  232. {
  233.          Json::Value appResult;
  234.          bool ret;
  235.          string appResultMsg;
  236.          SessionManager& sm = SessionManager::GetInstance();
  237.          
  238.         Command* cmd = task->GetCommand();
  239.        
  240.         if(cmd->IsProvidedResult()){
  241.                 ret = cmd->BuildAppResult(task->GetCmdValue(),appResult);
  242.                 if(!ret){
  243.                        
  244.                         return false;
  245.                 }

  246.                 appResultMsg = appResult.toStyledString();

  247.                 sm.SendAppMessage(task->m_appTargetIp,task->m_appTargetPort,appResultMsg,task);
  248.         }
  249. }



 楼主| keer_zu 发表于 2016-6-8 11:36 | 显示全部楼层
CommandDb.h

  1. #ifndef __COMMAND_DB_H__
  2. #define __COMMAND_DB_H__
  3. #include <string>
  4. #include "json/json.h"
  5. #include "TsManager.h"
  6. //#include "Task.h"

  7. using namespace std;


  8. typedef enum{
  9.         DocTask = 0,
  10.         VideoTask,
  11.         DpptTask,
  12.         NoTsTask
  13. }TaskType;

  14. class Command
  15. {
  16. protected:
  17.         string m_commandName;
  18.         TsProperty m_tsProperty;
  19.         bool m_isUseTs;
  20.         TsType m_tsType;
  21.         TaskType m_taskType;
  22.         bool m_isProvidedResult;
  23.         string m_tsResultName;
  24. public:
  25.         Command();
  26.         virtual ~Command();

  27.         string GetCommansName(){ return m_commandName;}
  28.         bool IsProvidedResult(){return m_isProvidedResult;}
  29.         TsType GetTsType(){return m_tsType;}
  30.         TaskType GetTaskType(){return m_taskType;}
  31.         string GetTaskResultName(){return m_tsResultName;};
  32.        
  33.         virtual bool BuildTsCmd(const Json::Value& appCmd,Json::Value& tsCmd);
  34.         virtual bool BuildTsResponse(const Json::Value& tsResult,Json::Value& tsResponse);
  35.        
  36.         virtual bool BuildAppResult(const Json::Value& tsResult,Json::Value& appResult);
  37.         virtual bool BuildAppResult(ErrorInfo info,Json::Value& appResult);
  38.         virtual bool  BuildAppResponse(Json::Value& appResponse,unsigned int errorCode,string ErrorDetail) = 0;
  39. };


  40. ///////////////////////////////// specific command //////////////////////////////////////
  41. class CommandServerStatus : public Command
  42. {
  43. public:
  44.         CommandServerStatus()
  45.         {
  46.                 m_commandName = "server_status_task";
  47.                 m_isUseTs = false;
  48.                 m_taskType = NoTsTask;
  49.                 m_isProvidedResult = true;
  50.         }
  51.        
  52.         ~CommandServerStatus();
  53.         virtual bool  BuildAppResponse(Json::Value& appResponse,unsigned int errorCode,string ErrorDetail);
  54.         virtual bool BuildAppResult(const Json::Value& appCmd,Json::Value& appResult);

  55. };


  56. class CommandVideoMessage : public Command
  57. {
  58. public:
  59.         CommandVideoMessage()
  60.         {
  61.                 m_commandName = "video_message_task";
  62.                 m_isUseTs = true;
  63.                 m_tsType = TS_VIDEO;
  64.                 m_tsProperty = TS_LIGHT;
  65.                 m_taskType = VideoTask;
  66.                 m_isProvidedResult = true;
  67.                 m_tsResultName = "Message";
  68.         }

  69.         ~CommandVideoMessage(){}

  70.         virtual bool  BuildAppResponse(Json::Value& appResponse,unsigned int errorCode,string ErrorDetail);

  71. };


  72. class CommandVideoTrans : public Command
  73. {
  74. public:
  75.         CommandVideoTrans()
  76.         {
  77.                 m_commandName = "video_trans_task";
  78.                 m_isUseTs = true;
  79.                 m_tsType = TS_VIDEO;
  80.                 m_tsProperty = TS_HEAVY;
  81.                 m_taskType = VideoTask;
  82.                 m_isProvidedResult = true;
  83.                 m_tsResultName = "Transfer";
  84.         }

  85.         ~CommandVideoTrans(){}

  86.         virtual bool  BuildAppResponse(Json::Value& appResponse,unsigned int errorCode,string ErrorDetail);
  87. };

  88. class CommandPrintScreen : public Command
  89. {
  90. public:
  91.         CommandPrintScreen()
  92.         {
  93.                 m_commandName = "print_screen_task";
  94.                 m_isUseTs = true;
  95.                 m_tsType = TS_VIDEO;
  96.                 m_tsProperty = TS_LIGHT;
  97.                 m_taskType = VideoTask;
  98.                 m_isProvidedResult = true;
  99.                 m_tsResultName = "CapVideo";
  100.         }
  101.         ~CommandPrintScreen(){}

  102.         virtual bool  BuildAppResponse(Json::Value& appResponse,unsigned int errorCode,string ErrorDetail);

  103. };

  104. class CommandVideoCut : public Command
  105. {
  106. public:
  107.         CommandVideoCut()
  108.         {
  109.                 m_commandName = "video_cut_task";
  110.                 m_isUseTs = true;
  111.                 m_tsType = TS_VIDEO;
  112.                 m_tsProperty = TS_LIGHT;
  113.                 m_taskType = VideoTask;
  114.                 m_isProvidedResult = true;
  115.                 m_tsResultName = "VideoCut";
  116.         }

  117.         virtual bool  BuildAppResponse(Json::Value& appResponse,unsigned int errorCode,string ErrorDetail);

  118. };

  119. class CommandVideoMerge : public Command
  120. {
  121. public:
  122.         CommandVideoMerge()
  123.         {
  124.                 m_commandName = "video_merge_task";
  125.                 m_isUseTs = true;
  126.                 m_tsType = TS_VIDEO;
  127.                 m_tsProperty = TS_HEAVY;
  128.                 m_taskType = VideoTask;
  129.                 m_isProvidedResult = true;
  130.                 m_tsResultName = "VideoMerge";
  131.         }

  132.         virtual bool  BuildAppResponse(Json::Value& appResponse,unsigned int errorCode,string ErrorDetail);

  133. };


  134. class CommandDocTrans : public Command
  135. {
  136. public:
  137.         CommandDocTrans()
  138.         {
  139.                 m_commandName = "doc_trans_task";
  140.                 m_isUseTs = true;
  141.                 m_taskType = DocTask;
  142.                 m_isProvidedResult = true;
  143.                
  144.         }
  145.         static bool GetServerTypes(vector<string>& CommandNames)
  146.         {
  147.                 CommandNames.push_back("DOC_WPS");
  148.                 CommandNames.push_back("DOC_OFFICE");
  149.                 CommandNames.push_back("DOC_LINUX");
  150.         }
  151.         virtual bool  BuildAppResponse(Json::Value& appResponse,unsigned int errorCode,string ErrorDetail);

  152. };


  153. class CommandDynamicPptTrans : public Command
  154. {
  155. public:
  156.         CommandDynamicPptTrans()
  157.         {
  158.                 m_commandName = "dynamic_ppt_trans_task";
  159.                 m_isUseTs = true;
  160.                 m_tsType = TS_DYNAMIC_PPT;
  161.                 m_taskType = DpptTask;
  162.                 m_isProvidedResult = true;
  163.         }
  164.         static void GetServerTypes(vector<string>& CommandNames)
  165.         {
  166.                 CommandNames.push_back("DYNAMIC_PPT");
  167.         }
  168.         virtual bool  BuildAppResponse(Json::Value& appResponse,unsigned int errorCode,string ErrorDetail);

  169. };

  170. class CommandTaskProgress : public Command
  171. {
  172. public:
  173.         CommandTaskProgress()
  174.         {
  175.                 m_commandName = "task_progress_request";
  176.                 m_isUseTs = false;
  177.                 m_taskType = NoTsTask;
  178.                 m_isProvidedResult = true;
  179.         }

  180.         virtual bool  BuildAppResponse(Json::Value& appResponse,unsigned int errorCode,string ErrorDetail);

  181. };

  182. /////////////////////////////////  CommandDb  ///////////////////////////////////////

  183. class CommandDb
  184. {
  185.         CommandDb();
  186. public:
  187.         static CommandDb& GetInstance()
  188.         {
  189.                 static CommandDb instance_;
  190.                 return instance_;
  191.         }
  192.         ~CommandDb();
  193.         bool AddCommand(Command* cmd);
  194.         bool GetCommandNameInSpecificTaskType(TaskType taskType,vector<string>& CommandNames);
  195.         bool GetResultNameInSpecificTaskType(TaskType taskType,vector<string>& CommandNames);
  196.         Command* GetCommand(string cmdName);
  197. private:
  198.         map<string,Command*> m_commands;
  199. };
  200. #endif

 楼主| keer_zu 发表于 2016-6-8 11:37 | 显示全部楼层
CommandDb.cpp


  1. #include "CommandDb.h"
  2. #include "TsManager.h"

  3. CommandServerStatus GCmdServerStatus;
  4. CommandVideoMessage GCmdVideoMessage;
  5. CommandVideoTrans GCmdVideoTrans;
  6. CommandPrintScreen GCmdPrintScreen;
  7. CommandVideoMerge GCmdVideoMerge;
  8. CommandDocTrans GCmdDocTrans;
  9. CommandDynamicPptTrans GCmdDynamicPptTrans;


  10. //CommandDb GCommandDb;


  11. ////////////////////////////////////// Command //////////////////////////////////////////

  12. Command::Command()
  13. {

  14. }

  15. Command::~Command()
  16. {

  17. }


  18. bool Command::BuildTsCmd(const Json::Value& appCmd,Json::Value& tsCmd)
  19. {

  20.         return true;
  21. }

  22. bool Command::BuildTsResponse(const Json::Value& tsResult,Json::Value& tsResponse)
  23. {

  24.         return true;
  25. }


  26. bool Command::BuildAppResult(ErrorInfo info,Json::Value& appResult)
  27. {

  28.         return true;
  29. }

  30. bool Command::BuildAppResult(const Json::Value& tsResult,Json::Value& appResult)
  31. {

  32. }


  33. //////////////////////////////////// CommandServerStatus ///////////////////////////////////////////

  34. //CommandServerStatus::CommandServerStatus()


  35. CommandServerStatus::~CommandServerStatus()
  36. {

  37. }

  38. bool  CommandServerStatus::BuildAppResponse(Json::Value& appResponse,unsigned int errorCode,string ErrorDetail)
  39. {

  40.         return true;
  41. }

  42. bool CommandServerStatus::BuildAppResult(const Json::Value& appCmd,Json::Value& appResult)
  43. {

  44.         return true;
  45. }

  46. ////////////////////////////////////// CommandVideoMessage //////////////////////////////////////
  47. bool  CommandVideoMessage::BuildAppResponse(Json::Value& appResponse,unsigned int errorCode,string ErrorDetail)
  48. {

  49.         return true;
  50. }
  51. ////////////////////////////////////// CommandVideoTrans ///////////////////////////////////////
  52. bool  CommandVideoTrans::BuildAppResponse(Json::Value& appResponse,unsigned int errorCode,string ErrorDetail)
  53. {

  54.         return true;
  55. }

  56. ///////////////////////////////////// CommandPrintScreen ///////////////////////////////////////
  57. bool CommandPrintScreen::BuildAppResponse(Json::Value& appResponse,unsigned int errorCode,string ErrorDetail)
  58. {

  59.         return true;
  60. }

  61. ///////////////////////////////////// CommandVideoCut /////////////////////////////////////////
  62. bool CommandVideoCut::BuildAppResponse(Json::Value& appResponse,unsigned int errorCode,string ErrorDetail)
  63. {

  64.         return true;
  65. }


  66. ///////////////////////////////////// CommandVideoMerge //////////////////////////////////////
  67. bool CommandVideoMerge::BuildAppResponse(Json::Value& appResponse,unsigned int errorCode,string ErrorDetail)
  68. {

  69.         return true;
  70. }


  71. //////////////////////////////////// CommandDocTrans ////////////////////////////////////////
  72. bool CommandDocTrans::BuildAppResponse(Json::Value& appResponse,unsigned int errorCode,string ErrorDetail)
  73. {

  74.         return true;
  75. }

  76. /////////////////////////////////// CommandDynamicPptTrans //////////////////////////////////
  77. bool CommandDynamicPptTrans::BuildAppResponse(Json::Value& appResponse,unsigned int errorCode,string ErrorDetail)
  78. {

  79.         return true;
  80. }


  81. ///////////////////////////////// CommandTaskProgress ///////////////////////////////////////
  82. bool CommandTaskProgress::BuildAppResponse(Json::Value& appResponse,unsigned int errorCode,string ErrorDetail)
  83. {

  84.         return true;
  85. }


  86. /////////////////////////////////////// CommandDb ////////////////////////////////////////
  87. CommandDb::CommandDb()
  88. {
  89.         AddCommand(&GCmdServerStatus);
  90.         AddCommand(&GCmdVideoMessage);
  91.         AddCommand(&GCmdVideoTrans);
  92.         AddCommand(&GCmdPrintScreen);
  93.         AddCommand(&GCmdVideoMerge);
  94.         AddCommand(&GCmdDocTrans);
  95.         AddCommand(&GCmdDynamicPptTrans);
  96. }

  97. CommandDb::~CommandDb()
  98. {

  99. }


  100. bool CommandDb::AddCommand(Command* cmd)
  101. {
  102.         m_commands[cmd->GetCommansName()] = cmd;
  103.         return true;
  104. }


  105. bool CommandDb::GetCommandNameInSpecificTaskType(TaskType taskType,vector<string>& CommandNames)
  106. {
  107.         map<string,Command *>::iterator it;
  108.        
  109.         for(it=m_commands.begin();it!=m_commands.end();++it){
  110.                 if(it->second->GetTaskType() == taskType)
  111.                         CommandNames.push_back(it->first);
  112.         }

  113.         return true;
  114. }

  115. bool CommandDb::GetResultNameInSpecificTaskType(TaskType taskType,vector<string>& CommandNames)
  116. {
  117.         map<string,Command *>::iterator it;

  118.         if(taskType == NoTsTask){
  119.                
  120.                 return false;
  121.         }

  122.         if(taskType == DpptTask){
  123.                 CommandDocTrans::GetServerTypes(CommandNames);
  124.                 return true;
  125.         }

  126.         if(taskType == DocTask){
  127.                 CommandDynamicPptTrans::GetServerTypes(CommandNames);
  128.                 return true;
  129.         }
  130.        
  131.         for(it=m_commands.begin();it!=m_commands.end();++it){
  132.                 if(it->second->GetTaskType() == taskType)
  133.                         CommandNames.push_back(it->second->GetTaskResultName());
  134.         }

  135.         return true;
  136. }

  137. Command* CommandDb::GetCommand(string cmdName)
  138. {
  139.         if(m_commands.find(cmdName) != m_commands.end()){
  140.                 return m_commands[cmdName];
  141.         } else {
  142.                 return NULL;
  143.         }
  144. }

 楼主| keer_zu 发表于 2016-6-8 11:38 | 显示全部楼层
  1. #ifndef __DISPTACHER_H__
  2. #define __DISPTACHER_H__

  3. #include <stdio.h>
  4. #include <iostream>
  5. #include <string>
  6. #include <vector>
  7. #include "json/json.h"
  8. //#include "InterfaceApi.h"
  9. #include "TsQueue.h"
  10. #include "TaskQueue.h"


  11. class Disptacher {
  12. public:
  13.         Disptacher(){}

  14.         bool DuplicateTaskCheck(string id)
  15.         {
  16.                 return !(m_taskRunQueue->CheckSameTaskId(id) || m_taskWaitQueue->CheckSameTaskId(id));
  17.         }

  18.         virtual bool Submit(Task *task) = 0;

  19. protected:
  20.         TaskWaitQueue* m_taskWaitQueue;
  21.         TaskRunQueue* m_taskRunQueue;
  22.         map<string,TsQueue*>m_tsQueues;
  23.         //vector<string> m_commandNames;

  24. };

  25. class DocDisptacher : public Disptacher
  26. {
  27.         map<int,string> m_tsPriority;
  28.         DocDisptacher();
  29. public:
  30.         static DocDisptacher& GetInstance();
  31.         virtual bool Submit(Task *task);

  32.         bool GetDocTsPriority();
  33. };

  34. class VideoDisptacher : public Disptacher
  35. {
  36.         VideoDisptacher();
  37. public:
  38.         static VideoDisptacher& GetInstance();
  39.         virtual bool Submit(Task *task);
  40. };

  41. class DpptDisptacher : public Disptacher
  42. {
  43.         DpptDisptacher();
  44. public:
  45.         static DpptDisptacher& GetInstance();
  46.         virtual bool Submit(Task *task);
  47. };

  48. #endif


Disptacher.h
 楼主| keer_zu 发表于 2016-6-8 11:39 | 显示全部楼层
Disptacher.cpp


  1. #include "Disptacher.h"
  2. #include "AddTask.h"
  3. //#include "TsManager.h"
  4. //#include "CommandDb.h"
  5. #include "error.h"
  6. #include "Log4cxxWrapper.h"
  7. #include <algorithm>
  8. #include <memory>
  9. #include "ConfigManager.h"

  10. #include "CommandDb.h"



  11. //using namespace std;
  12. using namespace cdy;


  13. extern TaskWaitQueue GDocTaskWaitQueue;
  14. extern TaskWaitQueue GVideoTaskWaitQueue;
  15. extern TaskWaitQueue GDpptTaskWaitQueue;
  16. extern TaskWaitQueue GNoTsTaskTaskWaitQueue;


  17. extern TaskRunQueue GDocTaskRunQueue;
  18. extern TaskRunQueue GVideoTaskRunQueue;
  19. extern TaskRunQueue GDpptTaskRunQueue;
  20. extern TaskRunQueue GNoTsTaskRunQueue;

  21. extern TsQueue GVideoTsQueue;
  22. extern TsQueue GDocOpenofficeTsQueue;
  23. extern TsQueue GDocWpsTsQueue;
  24. extern TsQueue GDocOfficeTsQueue;
  25. extern TsQueue GDpptTsQueue;



  26. string ToUpperString(string str)  
  27. {  
  28.         string tmpstr= str;
  29.         transform(tmpstr.begin(), tmpstr.end(), tmpstr.begin(), (int (*)(int))toupper);  
  30.         return tmpstr;
  31. }  
  32. string ToLowerString(string str)  
  33. {  
  34.         string tmpstr= str;
  35.         transform(tmpstr.begin(), tmpstr.end(), tmpstr.begin(), (int (*)(int))tolower);  
  36.         return tmpstr;
  37. }


  38. bool CheckNoSameName(map<int,string>& mp, int count)
  39. {
  40.         for(int i=0;i<count-1;i++){
  41.                 for(int j=i+1;j<count;j++){
  42.                         if(mp[i] == mp[j]){
  43.                                 return false;
  44.                         }
  45.                 }
  46.         }
  47.         return true;
  48. }


  49. //////////////////////////////// Disptacher //////////////////////////////////




  50. //////////////////////////////// DocDisptacher ///////////////////////////////

  51. DocDisptacher::DocDisptacher()
  52. {
  53.         m_taskWaitQueue = &GDocTaskWaitQueue;
  54.         m_taskRunQueue = &GDocTaskRunQueue;

  55.         GetDocTsPriority();
  56.        
  57.         m_tsQueues["linux"] = &GDocOpenofficeTsQueue;
  58.         m_tsQueues["wps"] = &GDocWpsTsQueue;
  59.         m_tsQueues["office"] = &GDocOfficeTsQueue;

  60.         GetDocTsPriority();
  61. }

  62. DocDisptacher& DocDisptacher::GetInstance()
  63. {
  64.         static DocDisptacher instance_;
  65.         return instance_;
  66. }

  67. bool DocDisptacher::Submit(Task *task)
  68. {
  69.         TsQueue* tsq;
  70.         TransServer* ts = NULL;
  71.         int i;
  72.         Json::Value tsCmd;
  73.         Json::Value appResponse;
  74.         LoggerWrapper dsLog= LoggerWrapper::GetInstance();
  75.         Command* cmd;
  76.         bool ret;
  77. /*
  78.         if(task->m_triedTimes >= task->m_maxTryTimes){
  79.                 cmd = task->GetCommand();
  80.                
  81.                 ret = cmd->BuildAppResponse(appResponse,errorCode, string ErrorDetail);
  82.         }
  83. */       
  84.         for(i = 0;i < m_tsPriority.size();i ++){
  85.                 tsq = m_tsQueues[m_tsPriority[0]];
  86.                 ts = tsq->GetTsIdle();
  87.                 if(ts){
  88.                         task->m_alreadyTriedTsType.push_back(i);
  89.                         task->m_alreadyTriedTsId.push_back(ts->GetId());

  90.                         break;
  91.                 }
  92.         }

  93.         if(ts){
  94.                 Command* cmd = task->GetCommand();
  95.                 if(!cmd->BuildTsCmd(task->GetCmdValue(),tsCmd)){
  96.                         dsLog.Log(true,LOGGER_ERROR,"build doc ts cmd error !!!!!, [%s][%s][%d]\n",__FILE__,__PRETTY_FUNCTION__,__LINE__);
  97.                         return false;
  98.                 }

  99.                 ts->SetTask(task);

  100.                 string tsMsg = tsCmd.toStyledString() + '\0';
  101.                 TsSession* session = ts->GetSession();
  102.                 session->SendMessage(tsMsg);
  103.                 task->m_triedTimes += 1;
  104.                 m_taskRunQueue->PushTask(task,session);
  105.                
  106.         } else {
  107.                 m_taskWaitQueue->PushTask(task);
  108.         }
  109. }

  110. #define MAX_DOCUMENT_SEVER_TYPE_NUM 3
  111. bool DocDisptacher::GetDocTsPriority()
  112. {
  113.         Json::Value  value;  
  114.         std::auto_ptr<Json::Reader> pJsonParser(new Json::Reader(Json::Features::strictMode()));

  115.         LoggerWrapper dsLog= LoggerWrapper::GetInstance();

  116.         string strTsPriority = ""TsPriority":" + ConfigManager::GetTsPriority();
  117.         string strWholeJson = "{"+strTsPriority+"}";
  118.         //string strPriorityArray[MAX_DOCUMENT_SEVER_TYPE_NUM];

  119.         map<string,TsQueue*> tsQueue;
  120.        
  121.         if(pJsonParser->parse(strWholeJson,value)){
  122.                 const Json::Value TsPriority = value["TsPriority"];

  123.                 if((!value["TsPriority"].isNull()) && (value["TsPriority"].isArray()) && (MAX_DOCUMENT_SEVER_TYPE_NUM == TsPriority.size()) ){
  124.                         for (unsigned int i = 0; i < TsPriority.size(); i++){
  125.                                 if(TsPriority[i].isString()){
  126.                                         if(( "LINUX" == ToUpperString(TsPriority[i].asString()))||( "OFFICE" == ToUpperString(TsPriority[i].asString()))||( "WPS" == ToUpperString(TsPriority[i].asString()))){
  127.                                                 m_tsPriority[i] = TsPriority[i].asString();
  128.                                                
  129.                                         } else {
  130.                                                 dsLog.Log(true,LOGGER_ERROR,"error config file. Invalid TsPriority format  . :%s , [%s][%s][%d]\n",strTsPriority.c_str(),__FILE__,__PRETTY_FUNCTION__,__LINE__);               
  131.                                                 return false;
  132.                                         }
  133.                                 } else {
  134.                                         dsLog.Log(true,LOGGER_ERROR,"error config file. Invalid TsPriority format  . :%s , [%s][%s][%d]\n",strTsPriority.c_str(),__FILE__,__PRETTY_FUNCTION__,__LINE__);               
  135.                                         return false;            
  136.                                 }
  137.                         }
  138.                         if(!CheckNoSameName(m_tsPriority,MAX_DOCUMENT_SEVER_TYPE_NUM)){
  139.                                 dsLog.Log(true,LOGGER_ERROR,"error config file. Invalid TsPriority format  . :%s , [%s][%s][%d]\n",strTsPriority.c_str(),__FILE__,__PRETTY_FUNCTION__,__LINE__);               
  140.                                 return false;               
  141.                         }
  142.                 } else{
  143.   
  144.                         dsLog.Log(true,LOGGER_ERROR,"error config file. Invalid TsPriority format . :%s , [%s][%s][%d]\n",strTsPriority.c_str(),__FILE__,__PRETTY_FUNCTION__,__LINE__);               
  145.                         return false;            
  146.                 }

  147.         } else{
  148.                 dsLog.Log(true,LOGGER_ERROR,"error config file. Invalid TsPriority format  . :%s , [%s][%s][%d]\n",strTsPriority.c_str(),__FILE__,__PRETTY_FUNCTION__,__LINE__);               
  149.                 return false;            
  150.         }   

  151.         return true;

  152. }

  153. ///////////////////////////////// VideoDisptacher /////////////////////////////

  154. VideoDisptacher::VideoDisptacher()
  155. {
  156.         m_taskWaitQueue = &GVideoTaskWaitQueue;
  157.         m_taskRunQueue = &GVideoTaskRunQueue;
  158.         m_tsQueues["Video1"] = &GVideoTsQueue;
  159. }

  160. VideoDisptacher& VideoDisptacher::GetInstance()
  161. {
  162.         static VideoDisptacher instance_;
  163.         return instance_;
  164. }

  165. bool VideoDisptacher::Submit(Task *task)
  166. {
  167.         TsQueue* tsq;
  168.         TransServer* ts = NULL;
  169.         Json::Value tsCmd;
  170.         LoggerWrapper dsLog= LoggerWrapper::GetInstance();
  171.        

  172.         tsq = m_tsQueues["Video1"];
  173.         ts = tsq->GetTsIdle();
  174.         if(ts){
  175.                 task->m_alreadyTriedTsId.push_back(ts->GetId());

  176.                 Command* cmd = task->GetCommand();
  177.                 if(!cmd->BuildTsCmd(task->GetCmdValue(),tsCmd)){
  178.                         dsLog.Log(true,LOGGER_ERROR,"build doc ts cmd error !!!!!, [%s][%s][%d]\n",__FILE__,__PRETTY_FUNCTION__,__LINE__);
  179.                         return false;
  180.                 }

  181.                 string tsMsg = tsCmd.toStyledString() + '\0';
  182.                 TsSession* session = ts->GetSession();
  183.                 session->SendMessage(tsMsg);
  184.                 task->m_triedTimes += 1;
  185.                 m_taskRunQueue->PushTask(task,session);
  186.         } else {
  187.                 m_taskWaitQueue->PushTask(task);
  188.         }

  189. }

  190. //////////////////////////////// DpptDisptacher ///////////////////////////////

  191. DpptDisptacher::DpptDisptacher()
  192. {
  193.         m_taskWaitQueue = &GDpptTaskWaitQueue;
  194.         m_taskRunQueue = &GDpptTaskRunQueue;
  195.         m_tsQueues["Dppt1"] = &GDpptTsQueue;
  196. }


  197. DpptDisptacher& DpptDisptacher::GetInstance()
  198. {
  199.         static DpptDisptacher instance_;
  200.         return instance_;
  201. }


  202. bool DpptDisptacher::Submit(Task *task)
  203. {
  204.         TsQueue* tsq;
  205.         TransServer* ts = NULL;
  206.         Json::Value tsCmd;
  207.         LoggerWrapper dsLog= LoggerWrapper::GetInstance();
  208.        

  209.         tsq = m_tsQueues["Dppt1"];
  210.         ts = tsq->GetTsIdle();
  211.         if(ts){
  212.                 task->m_alreadyTriedTsId.push_back(ts->GetId());

  213.                 Command* cmd = task->GetCommand();
  214.                 if(!cmd->BuildTsCmd(task->GetCmdValue(),tsCmd)){
  215.                         dsLog.Log(true,LOGGER_ERROR,"build doc ts cmd error !!!!!, [%s][%s][%d]\n",__FILE__,__PRETTY_FUNCTION__,__LINE__);
  216.                         return false;
  217.                 }

  218.                 string tsMsg = tsCmd.toStyledString() + '\0';
  219.                 TsSession* session = ts->GetSession();
  220.                 session->SendMessage(tsMsg);
  221.                 task->m_triedTimes += 1;
  222.                 m_taskRunQueue->PushTask(task,session);
  223.         } else {
  224.                 m_taskWaitQueue->PushTask(task);
  225.         }
  226. }

 楼主| keer_zu 发表于 2016-6-8 11:40 | 显示全部楼层
Message.h



  1. #ifndef __MESSAGE_H__
  2. #define __MESSAGE_H__

  3. #include "InterfaceApi.h"
  4. #include "AddTask.h"
  5. #include "TaskResult.h"
  6. //#include "TsInterface.h"

  7. typedef enum{
  8.         TsRegistMsg = 0,
  9.         TsResultMsg,
  10.         TsUpdateMsg,
  11.         TsLinkResponse
  12. }TsMsgType;


  13. class Message
  14. {
  15. public:
  16.         Message(){}
  17.         virtual ~Message(){}
  18. };

  19. class AppMessage : public Message
  20. {
  21. public:
  22.        
  23. };

  24. class TsMessage : public Message
  25. {
  26. protected:
  27.         string m_type;
  28.         TsMsgType m_tsMsgType;
  29.         string m_serverType;
  30. public:
  31.         virtual ~TsMessage(){}
  32.         TsMessage(){}
  33.         TsMsgType GetTsMsgType(){return m_tsMsgType;}

  34.         string GetServerType(){return m_serverType;}
  35.        
  36. };


  37. class TsResultMessage : public TsMessage
  38. {

  39. public:
  40.         TsResultMessage(string serverType)
  41.         {
  42.                 m_type = "TransResult";
  43.                 m_tsMsgType = TsUpdateMsg;
  44.                 m_serverType = serverType;
  45.         }
  46. public:
  47.         //string m_serverType;
  48. };

  49. class TsRegistMessage : public TsMessage
  50. {

  51. public:
  52.         TsRegistMessage(string serverType)
  53.         {
  54.                 m_type = "SvrRegister";
  55.                 m_tsMsgType = TsRegistMsg;
  56.                 m_serverType = serverType;
  57.         }

  58.         bool BuildResponse(int errCode,const string& errorDetial,string& response);
  59. };



  60. class TsUpdateMessage : public TsMessage
  61. {
  62. public:
  63.         TsUpdateMessage(string serverType)
  64.         {
  65.                 m_type = "TaskProgress";
  66.                 m_tsMsgType = TsUpdateMsg;
  67.                 m_serverType = serverType;
  68.         }
  69. };

  70. class TsMessageDb
  71. {
  72.         TsMessageDb();
  73. public:
  74.         static TsMessageDb& GetInstance()
  75.         {
  76.                 static TsMessageDb instance_;
  77.                 return instance_;
  78.         }
  79.         bool AddMessage(TsMessage *msg);
  80.         bool GetServerTypeInSpecificType(TsMsgType msgType,vector<string>& tsMessages);
  81.         TsMessage* GetMessage(TsMsgType msgType,string serverType);
  82. private:
  83.         vector<TsMessage *> m_tsMessages;
  84. };


  85. class TsMessageHandle
  86. {
  87.         TsMessageHandle* next;
  88. public:
  89.         TsMessageHandle(){}
  90.         bool IsThisMsg(string type)
  91.         {
  92.                 if(type == m_type)
  93.                         return true;
  94.                 else
  95.                         return false;
  96.         }
  97.         void setNext(TsMessageHandle *n)
  98.         {
  99.                 next = n;
  100.         }
  101.         void add(TsMessageHandle *n)
  102.         {
  103.                 if (next)
  104.                         next->add(n);
  105.                 else
  106.                         next = n;
  107.         }
  108.         virtual void SpacificHandle(Json::Value& value,TsSession* tsSession)
  109.         {
  110.                 if(next != NULL)
  111.                         next->SpacificHandle(value,tsSession);
  112.                 else {   // this command does not exist;
  113.                         printf("error");
  114.                         // TODO: log
  115.                 }
  116.         }
  117. protected:
  118.         string m_type;
  119. };

  120. class TsRegistMessageHandle : public TsMessageHandle
  121. {
  122.         ITsRegister* m_register;
  123.        

  124.         TsRegistMessageHandle(ITsRegister* reg)
  125.         {
  126.                 m_register = reg;
  127.                 m_type = "SvrRegister";
  128.         }
  129. public:
  130.         virtual void SpacificHandle(Json::Value& value,TsSession* tsSession);
  131.         static TsRegistMessageHandle& GetInstance(ITsRegister* reg)
  132.         {
  133.                 static  TsRegistMessageHandle instance_(reg);
  134.                 return instance_;        
  135.         }
  136. };

  137. class TsResultMessageHandle : public TsMessageHandle
  138. {
  139.         //ITaskResult* m_taskResult;
  140.         TaskResult* m_taskResult;
  141.         TsResultMessageHandle(/*ITaskResult* tr*/)
  142.         {
  143.                 //m_taskResult = tr;
  144.                 m_type = "TransResult";
  145.                 m_taskResult = &DocTaskResult::GetInstance();

  146.                 VideoTaskResult &videoTaskResult = VideoTaskResult::GetInstance();
  147.                 DpptTaskResult &dpptTaskResult = DpptTaskResult::GetInstance();

  148.                 m_taskResult->add(&videoTaskResult);
  149.                 m_taskResult->add(&dpptTaskResult);
  150.         }
  151. public:
  152.         virtual void SpacificHandle(Json::Value& value,TsSession* tsSession);
  153.         static TsResultMessageHandle& GetInstance()
  154.         {
  155.                 static  TsResultMessageHandle instance_;
  156.                 return instance_;        
  157.         }
  158. };

  159. class TsUpdateMessageHandle : public TsMessageHandle
  160. {
  161.         ITsUpdateInfo* m_updataInfo;
  162.         TsUpdateMessageHandle(ITsUpdateInfo* ui):m_updataInfo(ui)
  163.                 {m_type = "TaskProgress";}
  164. public:
  165.         virtual void SpacificHandle(Json::Value& value,TsSession* tsSession);
  166.         static TsUpdateMessageHandle& GetInstance(ITsUpdateInfo* ui)
  167.         {
  168.                 static  TsUpdateMessageHandle instance_(ui);
  169.                 return instance_;        
  170.         }
  171. };

  172. class MessageAnalyzer
  173. {
  174. public:
  175.        
  176. };

  177. class TsMessageAnalyzer : public MessageAnalyzer,public ITsNewFrame
  178. {
  179.         TsMessageAnalyzer();
  180.         //TaskResult* m_taskResult;
  181.         TsMessageHandle* m_messageHandle;
  182. public:
  183.         ~TsMessageAnalyzer();
  184.         static TsMessageAnalyzer& GetInstance();
  185.         virtual void OnNewFrame(TsSession* tsServerSion,const string frame);
  186. };

  187. class AppMessageAnalyzer : public MessageAnalyzer,public IAppNewFrame
  188. {
  189.         AppMessageAnalyzer();
  190.         AddTask* m_addTask;
  191. public:
  192.         ~AppMessageAnalyzer();
  193.         static AppMessageAnalyzer& GetInstance();
  194.         virtual void OnNewFrame(AppServerSession *appServerSion,string frame);
  195. };


  196. class testITsRegister : public ITsRegister
  197. {
  198. public:
  199.         virtual void OnRegister(Json::Value& value,TsSession *session){}
  200. };

  201. #endif
 楼主| keer_zu 发表于 2016-6-8 11:41 | 显示全部楼层
Message.cpp



  1. #include "Message.h"
  2. #include <memory>.
  3. #include "json/json.h"
  4. #include "Log4cxxWrapper.h"
  5. #include "TsManager.h"

  6. using namespace std;

  7. TsResultMessage  tsDpptResult("DYNAMIC_PPT");
  8. TsResultMessage  tsDocWindowsResult("DOC_WINDOWS");
  9. TsResultMessage  tsDocResult("DOC");
  10. TsResultMessage  tsDocWpsResult("DOC_WPS");
  11. TsResultMessage  tsTransferResult("Transfer");
  12. TsResultMessage  tsVideoCutResult("VideoCut");
  13. TsResultMessage  tsVideoMergeResult("VideoMerge");
  14. TsResultMessage  tsCapVideoResult("CapVideo");
  15. TsResultMessage  tsMessageResult("Message");
  16. TsRegistMessage  tsRegistMessage("");
  17. //TsLinkResponseMessage tsLinkResponseMessage("");
  18. TsUpdateMessage tsUpdateMessage("");

  19. //////////////////////////////// TsRegistMessage /////////////////////////////////////////

  20. bool TsRegistMessage::BuildResponse(int errCode,const string& errorDetial,string& response)
  21. {

  22.         return true;
  23. }

  24. TsMessageDb::TsMessageDb()
  25. {
  26.         AddMessage(&tsDpptResult);
  27.         AddMessage(&tsDocWindowsResult);
  28.         AddMessage(&tsDocResult);
  29.         AddMessage(&tsDocWpsResult);
  30.         AddMessage(&tsTransferResult);
  31.         AddMessage(&tsVideoCutResult);
  32.         AddMessage(&tsVideoMergeResult);
  33.         AddMessage(&tsCapVideoResult);
  34.         AddMessage(&tsMessageResult);
  35.         AddMessage(&tsRegistMessage);
  36. //        AddMessage(&tsLinkResponseMessage);
  37.         AddMessage(&tsUpdateMessage);
  38. }

  39. bool TsMessageDb::AddMessage(TsMessage * msg)
  40. {
  41.         m_tsMessages.push_back(msg);
  42.         return true;
  43. }

  44. bool TsMessageDb::GetServerTypeInSpecificType(TsMsgType msgType, vector < string > & tsMessages)
  45. {
  46.         vector<TsMessage *>::iterator t ;
  47.         for(t=m_tsMessages.begin(); t!=m_tsMessages.end(); t++){
  48.                 if((*t)->GetTsMsgType() == msgType)
  49.                         tsMessages.push_back((*t)->GetServerType());
  50.         }
  51.        
  52.         return true;
  53. }

  54. TsMessage* TsMessageDb::GetMessage(TsMsgType msgType, string serverType)
  55. {
  56.         TsMessage* message = NULL;
  57.         vector<TsMessage *>::iterator t ;
  58.         for(t=m_tsMessages.begin(); t!=m_tsMessages.end(); t++){
  59.                 if((*t)->GetTsMsgType() == msgType && (*t)->GetServerType() == serverType){
  60.                         message = *t;
  61.                         break;
  62.                 }
  63.         }
  64.        
  65.         return message;
  66. }
  67. //////////////////////////////// TsRegistMessageHandle /////////////////////////////

  68. void TsRegistMessageHandle::SpacificHandle(Json::Value& value,TsSession* tsSession)
  69. {
  70.         if(IsThisMsg(value["type"].asString())){
  71.                 if(m_register != NULL){
  72.                         m_register->OnRegister(value, tsSession);
  73.                 }
  74.         } else {
  75.                 TsMessageHandle::SpacificHandle(value,tsSession);
  76.         }
  77. }


  78. //////////////////////////////// TsResultMessageHandle /////////////////////////////////
  79. void TsResultMessageHandle::SpacificHandle(Json::Value& value,TsSession* tsSession)
  80. {
  81.         if(IsThisMsg(value["type"].asString())){
  82.                 if((!value["servertype"].isNull()) &&  (value["servertype"].isString())){
  83.                         m_taskResult->SpacificTaskResult(value,tsSession);
  84.                 } else {

  85.                 }
  86.         } else {
  87.                 TsMessageHandle::SpacificHandle(value,tsSession);
  88.         }
  89. }

  90. ////////////////////////////// TsUpdateMessageHandle //////////////////////////////////
  91. void TsUpdateMessageHandle::SpacificHandle(Json::Value& value,TsSession* tsSession)
  92. {
  93.         if(IsThisMsg(value["type"].asString())){
  94.                 if(m_updataInfo!= NULL){
  95.                         m_updataInfo->OnUpdateInfo(value, tsSession);
  96.                 }
  97.         } else {
  98.                 TsMessageHandle::SpacificHandle(value,tsSession);
  99.         }
  100. }

  101. ////////////////////////////////  TsMessageAnalyzer  ///////////////////////////////
  102. //class TsRegister;
  103. TsRegister testITR;

  104. TsMessageAnalyzer::TsMessageAnalyzer()
  105. {

  106.         m_messageHandle = &TsRegistMessageHandle::GetInstance(&testITR);

  107.         TsResultMessageHandle& resultHandle = TsResultMessageHandle::GetInstance();
  108.         TsUpdateMessageHandle& updateHandle = TsUpdateMessageHandle::GetInstance(NULL);

  109.         m_messageHandle->add(&resultHandle);
  110.         m_messageHandle->add(&updateHandle);
  111.        
  112. }

  113. TsMessageAnalyzer::~TsMessageAnalyzer()
  114. {

  115. }

  116. TsMessageAnalyzer& TsMessageAnalyzer::GetInstance()
  117. {
  118.         static  TsMessageAnalyzer instance_;
  119.         return instance_;
  120. }

  121. void  TsMessageAnalyzer::OnNewFrame(TsSession* tsServerSion,const string frame)
  122. {
  123.         Json::Value  value;  
  124.         LoggerWrapper dsLog= LoggerWrapper::GetInstance();

  125.         if(tsServerSion == NULL){

  126.                 return;
  127.         }

  128.         std::auto_ptr<Json::Reader> pJsonParser(new Json::Reader(Json::Features::strictMode()));

  129.         if(pJsonParser->parse(frame,value)){
  130.                 if((!value["type"].isNull()) &&  (value["type"].isString())){
  131.                         m_messageHandle->SpacificHandle( value, tsServerSion);
  132.                 } else {
  133.                        
  134.                 }
  135.         }
  136. }

  137. ////////////////////////////////  AppMessageAnalyzer  //////////////////////////////

  138. AppMessageAnalyzer::AppMessageAnalyzer()
  139. {
  140.         m_addTask = &AddDocTask::GetInstance();
  141.         AddVideoTask &addVideoTask = AddVideoTask::GetInstance();
  142.         AddDpptTask &addDpptTask = AddDpptTask::GetInstance();
  143.         AddNoUseTsTask &addNoUseTsTask = AddNoUseTsTask::GetInstance();
  144.        

  145.         m_addTask->add(&addVideoTask);
  146.         m_addTask->add(&addDpptTask);
  147.         m_addTask->add(&addNoUseTsTask);
  148.        
  149. }

  150. AppMessageAnalyzer::~AppMessageAnalyzer()
  151. {

  152. }

  153. AppMessageAnalyzer& AppMessageAnalyzer::GetInstance()
  154. {
  155.         static  AppMessageAnalyzer instance_;
  156.         return instance_;
  157. }

  158. void AppMessageAnalyzer::OnNewFrame(AppServerSession *appServerSion,string frame)
  159. {
  160.         Json::Value  value;  
  161.         LoggerWrapper dsLog= LoggerWrapper::GetInstance();

  162.         if(appServerSion == NULL){

  163.                 return;
  164.         }

  165.         std::auto_ptr<Json::Reader> pJsonParser(new Json::Reader(Json::Features::strictMode()));

  166.         if(pJsonParser->parse(frame,value)){
  167.                 if((!value["command"].isNull()) &&  (value["command"].isString())){
  168.                         m_addTask->AddSpacificTask(value,appServerSion);
  169.                 }
  170.         }
  171.        
  172. }



 楼主| keer_zu 发表于 2016-6-8 11:41 | 显示全部楼层
Task.h



  1. #ifndef __TASK_H__
  2. #define __TASK_H__
  3. #include <string>
  4. #include <list>
  5. #include "json/json.h"
  6. #include <vector>
  7. //#include "CommandDb.h"


  8. using namespace std;

  9. class Command;
  10. class TransServer;
  11. class Disptacher;
  12. class TsSession;

  13. typedef enum
  14. {
  15.         TASK_HEAVY = 0,
  16.         TASK_LIGHT = 1
  17. }TaskProperty;



  18. typedef struct
  19. {

  20. }ErrorInfo;


  21. class Task
  22. {
  23. private:

  24. protected:
  25.         string m_taskId;
  26.         bool m_isUseTs;
  27.         unsigned int m_taskPriority;
  28.        
  29.         Json::Value m_cmdValue;
  30.        
  31.         Command* m_command;
  32.         TransServer* m_transServer;
  33.         Disptacher* m_disptacher;

  34.         int m_progress;
  35.        
  36. public:
  37.         vector<int> m_alreadyTriedTsType;
  38.         vector<string> m_alreadyTriedTsId;

  39.         int m_triedTimes;
  40.         string m_appTargetIp;
  41.         unsigned int m_appTargetPort;

  42.         int m_maxTryTimes;
  43.         TsSession* m_tsSession;
  44. public:
  45.         virtual ~Task(){}
  46.         Task()
  47.         {
  48.                 m_command = NULL;
  49.                 m_transServer = NULL;
  50.         }

  51.         void Init()
  52.         {
  53.                 m_triedTimes = 0;
  54.         }

  55.         void Release()
  56.         {
  57.                 m_alreadyTriedTsType.clear();
  58.                 vector<int>(m_alreadyTriedTsType).swap(m_alreadyTriedTsType);

  59.                 m_alreadyTriedTsId.clear();
  60.                 vector<string>(m_alreadyTriedTsId).swap(m_alreadyTriedTsId);
  61.         }
  62.        
  63.         unsigned int GetPriority()
  64.         {
  65.                 return m_taskPriority;
  66.         }

  67.         void SetDisptacher(Disptacher* disp)
  68.         {
  69.                 m_disptacher = disp;
  70.         }

  71.         void SetProgress(int progress)
  72.         {
  73.                 m_progress = progress;
  74.         }

  75.         int GetProgress()
  76.         {
  77.                 return m_progress;
  78.         }

  79.         void SetPriority(unsigned int priority)
  80.         {
  81.                 m_taskPriority = priority;
  82.         }

  83.         string GetTaskId()
  84.         {
  85.                 return m_taskId;
  86.         }

  87.         void SetTaskId(string id)
  88.         {
  89.                 m_taskId = id;
  90.         }

  91.         void SetCmdValue(Json::Value& value)
  92.         {
  93.                 m_cmdValue = value;
  94.         }

  95.         Json::Value& GetCmdValue()
  96.         {
  97.                 return m_cmdValue;
  98.         }

  99.         Command* GetCommand()
  100.         {
  101.                 return m_command;
  102.         }

  103.         void SetCommand(Command* cmd)
  104.         {
  105.                 m_command = cmd;
  106.         }

  107.         bool IsExceedMaxTryTimes()
  108.         {
  109.                 return (this->m_triedTimes >= this->m_maxTryTimes);
  110.         }

  111.         void ResultReport(Json::Value& value);
  112. };

  113. class TaskDocument : public Task
  114. {
  115. public:
  116.         TaskDocument();
  117.         TaskDocument(string taskId,unsigned int priority){m_taskId = taskId;m_taskPriority = priority;}

  118.         void SetIsSpecific(bool is){m_isSpecificTsType = is;}
  119.         bool GetIsSpecific(){return m_isSpecificTsType;}
  120. private:
  121.         bool m_isSpecificTsType;
  122. };

  123. class TaskVideo : public Task
  124. {
  125. public:
  126.         TaskVideo();
  127.         TaskVideo(string taskId,unsigned int priority){m_taskId = taskId;m_taskPriority = priority;}
  128. };

  129. class TaskDppt : public Task
  130. {
  131. public:
  132.         TaskDppt();
  133.         TaskDppt(string taskId,unsigned int priority){m_taskId = taskId;m_taskPriority = priority;}
  134. };

  135. class TaskNoUseTs : public Task
  136. {
  137. public:
  138.         TaskNoUseTs(){}
  139.         TaskNoUseTs(string taskId,unsigned int priority){m_taskId = taskId;m_taskPriority = priority;}
  140. };



  141. class TaskCmp
  142. {
  143. public:
  144.         bool operator()(Task* a,Task* b)
  145.         {
  146.                 if(a->GetPriority() < b->GetPriority())
  147.                         return true;
  148.                 else if(a->GetPriority() == b->GetPriority())
  149.                         return a > b;
  150.                 else
  151.                         return false;
  152.         }

  153. };

  154. class TaskDb
  155. {
  156. public:
  157.         virtual Task* GetTask() = 0;

  158.         void GiveBackTask(Task *task)
  159.         {
  160.                 task->Release();
  161.                 m_taskBuf.push_back(task);
  162.         }
  163. protected:
  164.         list<Task*> m_taskBuf;
  165. };

  166. class TaskVideoDb : public TaskDb
  167. {
  168. public:
  169.         virtual Task* GetTask()
  170.         {
  171.                 if(!m_taskBuf.empty())
  172.                         return m_taskBuf.front();
  173.                 else
  174.                         return new TaskVideo;
  175.         }
  176. };

  177. class TaskDocumentDb : public TaskDb
  178. {
  179. public:
  180.         virtual Task* GetTask()
  181.         {
  182.                 if(!m_taskBuf.empty())
  183.                         return m_taskBuf.front();
  184.                 else
  185.                         return new TaskDocument;
  186.         }
  187. };

  188. class TaskDpptDb : public TaskDb
  189. {
  190. public:
  191.         virtual Task* GetTask()
  192.         {
  193.                 if(!m_taskBuf.empty())
  194.                         return m_taskBuf.front();
  195.                 else
  196.                         return new TaskDppt;
  197.         }
  198. };


  199. class TaskNoUseTsDb : public TaskDb
  200. {
  201. public:
  202.         virtual Task* GetTask()
  203.         {
  204.                 if(!m_taskBuf.empty())
  205.                         return m_taskBuf.front();
  206.                 else
  207.                         return new TaskNoUseTs;
  208.         }
  209. };



  210. #endif

 楼主| keer_zu 发表于 2016-6-8 11:42 | 显示全部楼层
Task.cpp


  1. #include "Task.h"
  2. #include "CommandDb.h"
  3. /////////////////////////// Task /////////////////////////////
  4. void Task::ResultReport(Json::Value& value)
  5. {
  6.         Json::Value appResult;
  7.         string result;
  8.         Command* cmd;
  9.         bool ret;
  10.        


  11.         cmd = this->GetCommand();
  12.        
  13.         ret = cmd->BuildAppResult(value,appResult);
  14.         if(ret){
  15.                 result = appResult.toStyledString();
  16.                 SessionManager::GetInstance().SendAppMessage(this->m_appTargetIp,this->m_appTargetPort,result,this);
  17.         } else {

  18.         }


  19. }


  20. ///////////////////////// TaskDocument ///////////////////////
  21. TaskDocument::TaskDocument()
  22. {
  23.         m_maxTryTimes = 3;
  24. }


  25. ///////////////////////// TaskVideo ///////////////////////
  26. TaskVideo::TaskVideo()
  27. {
  28.         m_maxTryTimes = 3;
  29. }



  30. ///////////////////////// TaskDppt ///////////////////////
  31. TaskDppt::TaskDppt()
  32. {
  33.         m_maxTryTimes = 3;
  34. }
 楼主| keer_zu 发表于 2016-6-8 11:44 | 显示全部楼层
TaskQueue.h


  1. #ifndef __TASK_QUEUE_H__
  2. #define __TASK_QUEUE_H__
  3. #include <queue>  
  4. #include <list>
  5. #include "Task.h"

  6. typedef priority_queue<Task*,vector<Task*>,TaskCmp> TaskPriorityQueue;



  7. class TaskWaitQueue
  8. {
  9. public:
  10.         Task* PopTask();

  11.         Task* GetTaskInSpecId(string taskId);
  12.        
  13.         bool PushTask(Task *task);

  14.         bool CheckSameTaskId(string TaskId);
  15. private:
  16.         TaskPriorityQueue m_queue;
  17. };


  18. class TaskRunQueue
  19. {
  20. public:
  21.         bool PushTask(Task *task,TsSession *session);
  22.         Task* GetTaskInSpecId(string taskId);
  23.         Task* GetTaskInSession(TsSession* session);
  24.         bool DelTask(string taskId);
  25.         bool CheckSameTaskId(string TaskId);
  26. private:
  27.         list<Task *> m_taskList;
  28. };



  29. #endif
 楼主| keer_zu 发表于 2016-6-8 11:44 | 显示全部楼层
TaskQueue.cpp



  1. #include "TaskQueue.h"
  2. #include <vector>
  3. #include <iostream>

  4. using namespace std;

  5. TaskWaitQueue GDocTaskWaitQueue;
  6. TaskWaitQueue GVideoTaskWaitQueue;
  7. TaskWaitQueue GDpptTaskWaitQueue;
  8. TaskWaitQueue GNoTsTaskTaskWaitQueue;


  9. TaskRunQueue GDocTaskRunQueue;
  10. TaskRunQueue GVideoTaskRunQueue;
  11. TaskRunQueue GDpptTaskRunQueue;
  12. TaskRunQueue GNoTsTaskRunQueue;

  13. TaskDocumentDb GTaskDocumentDb;
  14. TaskVideoDb GTaskVideoDb;
  15. TaskDpptDb GTaskDpptDb;
  16. TaskNoUseTsDb GTaskNoUseTsDb;


  17. Task* TaskWaitQueue::PopTask()
  18. {
  19.         Task* task;
  20.         if(m_queue.empty())
  21.                 return NULL;

  22.         task = m_queue.top( );
  23.         m_queue.pop();

  24.         return task;
  25. }

  26. Task* TaskWaitQueue::GetTaskInSpecId(string taskId)
  27. {
  28.         int i;
  29.         vector<Task *> *vtor = (vector<Task *> *)&m_queue;

  30.         for( int i = 0 ; i < vtor->size(); i++ ){
  31.                 if(((Task *)(vtor->operator [](i)))->GetTaskId() == taskId)
  32.                         return (Task *)(vtor->operator [](i));
  33.         }

  34.         return NULL;
  35. }

  36. bool TaskWaitQueue::PushTask(Task* task)
  37. {
  38.         task->m_tsSession = NULL;
  39.          m_queue.push(task);

  40.          return true;
  41. }


  42. bool TaskWaitQueue::CheckSameTaskId(string id)
  43. {
  44.         int i;
  45.         vector<Task *> *vtor = (vector<Task *> *)&m_queue;

  46.         for( int i = 0 ; i < vtor->size(); i++ ){
  47.                 if(((Task *)(vtor->operator [](i)))->GetTaskId() == id)
  48.                         return true;
  49.         }
  50.        
  51.         return false;
  52. }
  53. ////////////////////////// TaskRunQueue //////////////////////////////////

  54. bool TaskRunQueue::PushTask(Task* task,TsSession* session)
  55. {
  56.         task->m_tsSession = session;
  57.         m_taskList.push_back(task);

  58.         return true;
  59. }

  60. Task* TaskRunQueue::GetTaskInSpecId(string taskId)
  61. {
  62.         list<Task *>::iterator it;
  63.        
  64.         for(it = m_taskList.begin();it != m_taskList.end();it ++){
  65.                 if((*it)->GetTaskId() == taskId){
  66.                         return (Task *)(*it);
  67.                 }
  68.         }

  69.         return NULL;
  70. }

  71. Task* TaskRunQueue::GetTaskInSession(TsSession* session)
  72. {
  73.         list<Task *>::iterator it;
  74.        
  75.         for(it = m_taskList.begin();it != m_taskList.end();it ++){
  76.                 if((*it)->m_tsSession == session){
  77.                         return (Task *)(*it);
  78.                 }
  79.         }

  80.         return NULL;
  81. }

  82. bool TaskRunQueue::DelTask(string taskId)
  83. {
  84.         list<Task *>::iterator it;
  85.         bool ret = false;

  86.         for(it = m_taskList.begin();it != m_taskList.end();it ++){
  87.                 if((*it)->GetTaskId() == taskId){
  88.                         (*it)->m_tsSession = NULL;
  89.                         m_taskList.erase(it);
  90.                         ret = true;
  91.                 }
  92.         }

  93.         return ret;
  94. }

  95. bool TaskRunQueue::CheckSameTaskId(string taskId)
  96. {
  97.         list<Task *>::iterator it;
  98.         bool ret = false;

  99.         for(it = m_taskList.begin();it != m_taskList.end();it ++){
  100.                 if((*it)->GetTaskId() == taskId){
  101.                         ret = true;
  102.                 }
  103.         }

  104.         return ret;
  105. }



 楼主| keer_zu 发表于 2016-6-8 11:48 | 显示全部楼层
TaskResult.h



  1. #ifndef __TASK_RESULT_H__
  2. #define __TASK_RESULT_H__

  3. #include <iostream>
  4. #include <string>
  5. #include <vector>
  6. #include "TsInterface.h"
  7. #include "json/json.h"
  8. #include "InterfaceApi.h"
  9. #include "Disptacher.h"
  10. #include "Log4cxxWrapper.h"
  11. //#include "CommandDb.h"

  12. class CommandDb;




  13. class TaskResult// : public ITaskResult
  14. {
  15.         TaskResult *next; // 1. "next" pointer in the base class
  16.        
  17. protected:
  18.         vector<string> m_resultNames;
  19.         TaskDb *m_taskDb;
  20.         Disptacher *m_disptacher;
  21.         CommandDb* m_commandDb;
  22.         TaskRunQueue* m_taskRunQueue;

  23. public:
  24.         TaskResult();
  25.        
  26.         bool IsThisTaskType(const string resultName)
  27.         {
  28.                 vector<string>::iterator it;
  29.                
  30.                 for (it = m_resultNames.begin(); it != m_resultNames.end(); ++ it){
  31.                         if(resultName == *it)
  32.                                 return true;
  33.                 }

  34.                 return false;
  35.         }


  36.        
  37.                
  38.         void setNext(TaskResult *n)
  39.         {
  40.                 next = n;
  41.         }
  42.         void add(TaskResult *n)
  43.         {
  44.                 if (next)
  45.                         next->add(n);
  46.                 else
  47.                         next = n;
  48.         }
  49.         virtual void SpacificTaskResult(Json::Value& value,TsSession* tsServerSion)
  50.         {
  51.                 if(next != NULL)
  52.                         next->SpacificTaskResult(value,tsServerSion);
  53.                 else {   // this command does not exist;
  54.                         printf("error");
  55.                         // TODO: log
  56.                 }
  57.         }

  58.         void DoTaskRresult(Json::Value& value,TsSession* session)
  59.         {
  60.                 Task* task;
  61.                 string errorcode;
  62.                
  63.                 task = m_taskRunQueue->GetTaskInSession(session);
  64.                 if(!task){
  65.                         // TODO: log
  66.                         return;
  67.                 }
  68.                
  69.                 errorcode = value["errorcode"].asString();
  70.                 if(atoi(errorcode.c_str()) != 0){
  71.                         if(task->IsExceedMaxTryTimes()){
  72.                                 // TODO: log
  73.                                 task->ResultReport(value);
  74.                                 m_taskRunQueue->DelTask(task->GetTaskId());
  75.                                 m_taskDb->GiveBackTask(task);
  76.                         } else {
  77.                                 m_disptacher->Submit(task);
  78.                         }

  79.                         return;
  80.                 }
  81.                
  82.                 task->ResultReport(value);
  83.                 m_taskRunQueue->DelTask(task->GetTaskId());
  84.                 m_taskDb->GiveBackTask(task);

  85.                 return;
  86.         }

  87. };

  88. class VideoTaskResult : public TaskResult
  89. {
  90.         VideoTaskResult();
  91. public:

  92.         static VideoTaskResult& GetInstance();
  93.         virtual void SpacificTaskResult(Json::Value& value,TsSession* tsServerSion);       
  94. };

  95. class DocTaskResult : public TaskResult
  96. {
  97.         DocTaskResult();
  98. public:

  99.         static DocTaskResult& GetInstance();
  100.         virtual void SpacificTaskResult(Json::Value& value,TsSession* tsServerSion);
  101. };

  102. class DpptTaskResult : public TaskResult
  103. {
  104.         DpptTaskResult();
  105. public:

  106.         static DpptTaskResult& GetInstance();
  107.         virtual void SpacificTaskResult(Json::Value& value,TsSession* tsServerSion);
  108. };




  109. #endif

 楼主| keer_zu 发表于 2016-6-8 11:49 | 显示全部楼层
TaskResult.cpp


  1. #include "TaskResult.h"
  2. #include "CommandDb.h"

  3. extern TaskVideoDb GTaskVideoDb;

  4. extern TaskDocumentDb GTaskDocumentDb;
  5. extern TaskDpptDb GTaskDpptDb;

  6. extern TaskRunQueue GDocTaskRunQueue;
  7. extern TaskRunQueue GVideoTaskRunQueue;
  8. extern TaskRunQueue GDpptTaskRunQueue;

  9. ////////////////////////////////////// TaskResult /////////////////////////////////////////

  10. TaskResult::TaskResult()
  11. {
  12.         next = NULL;
  13.         m_commandDb = &CommandDb::GetInstance();
  14. }


  15. //////////////////////////////////// VideoTaskResult //////////////////////////////////////


  16. VideoTaskResult& VideoTaskResult::GetInstance()
  17. {
  18.         static  VideoTaskResult instance_;
  19.         return instance_;        
  20. }


  21. VideoTaskResult::VideoTaskResult()
  22. {
  23.         m_commandDb->GetResultNameInSpecificTaskType(VideoTask,m_resultNames);
  24.        
  25.         m_taskDb = &GTaskVideoDb;
  26.         m_disptacher = &VideoDisptacher::GetInstance();
  27.         m_taskRunQueue = &GVideoTaskRunQueue;
  28. }

  29. void VideoTaskResult::SpacificTaskResult(Json::Value& value,TsSession* session)
  30. {
  31.         if(IsThisTaskType(value["servertype"].asString())) {
  32.                
  33.                 cout << "---  video result!" << endl;
  34.                 DoTaskRresult(value,session);
  35.         } else {
  36.                 TaskResult::SpacificTaskResult(value,session);
  37.         }
  38. }


  39. //////////////////////////////////// DocTaskResult //////////////////////////////////////


  40. DocTaskResult& DocTaskResult::GetInstance()
  41. {
  42.         static  DocTaskResult instance_;
  43.         return instance_;        
  44. }


  45. DocTaskResult::DocTaskResult()
  46. {
  47.         m_commandDb->GetResultNameInSpecificTaskType(DocTask,m_resultNames);
  48.        
  49.         m_taskDb = &GTaskDocumentDb;
  50.         m_disptacher = &DocDisptacher::GetInstance();//GDocDisptacher;
  51.         m_taskRunQueue = &GDocTaskRunQueue;
  52. }

  53. void DocTaskResult::SpacificTaskResult(Json::Value& value,TsSession* session)
  54. {
  55.         Task* task;

  56.         if(IsThisTaskType(value["servertype"].asString())) {
  57.                
  58.                 cout << "---  Doc result!" << endl;
  59.                 DoTaskRresult(value,session);
  60.                
  61.         } else {
  62.                 TaskResult::SpacificTaskResult(value,session);
  63.         }
  64. }

  65. //////////////////////////////////// DpptTaskResult //////////////////////////////////////


  66. DpptTaskResult& DpptTaskResult::GetInstance()
  67. {
  68.         static  DpptTaskResult instance_;
  69.         return instance_;        
  70. }


  71. DpptTaskResult::DpptTaskResult()
  72. {
  73.         m_commandDb->GetResultNameInSpecificTaskType(DpptTask,m_resultNames);
  74.        
  75.         m_taskDb = &GTaskDpptDb;
  76.         m_disptacher = &DpptDisptacher::GetInstance();//&GDpptDisptacher;
  77.         m_taskRunQueue = &GDpptTaskRunQueue;
  78. }

  79. void DpptTaskResult::SpacificTaskResult(Json::Value& value,TsSession* session)
  80. {
  81.         Task* task;

  82.         if(IsThisTaskType(value["servertype"].asString())) {
  83.                
  84.                 cout << "---  Dppt result!" << endl;
  85.                 DoTaskRresult(value,session);
  86.                
  87.         } else {
  88.                 TaskResult::SpacificTaskResult(value,session);
  89.         }
  90. }
 楼主| keer_zu 发表于 2016-6-8 11:51 | 显示全部楼层
TransServer.h



  1. #ifndef __TRANS_SERVER_H__
  2. #define __TRANS_SERVER_H__
  3. #include <string>
  4. #include <list>
  5. #include "Task.h"
  6. using namespace std;

  7. class TsSession;

  8. typedef enum{
  9.         TsIdle = 0,
  10.         TsRunning
  11. }TsState;

  12. typedef enum{
  13.         DocTrans = 0,
  14.         VideoTrans,
  15.         DpptTrans
  16. }ServerType;

  17. typedef enum{
  18.         OpenofficeDocTrans = 0,
  19.         WpsDocTrans,
  20.         OfficeDocTrans
  21. }DocTransType;


  22. class TransServer
  23. {
  24. public:
  25.         virtual ~TransServer(){}
  26.         TransServer(){m_tsState = TsIdle;}
  27.         string GetId()
  28.         {
  29.                 return m_tsId;
  30.         }

  31.         void SetId(string& id)
  32.         {
  33.                 m_tsId = id;
  34.         }

  35.         ServerType GetServerType()
  36.         {
  37.                 return m_serverType;
  38.         }

  39.         TsState GetState()
  40.         {
  41.                 return m_tsState;
  42.         }

  43.         void SetState(TsState state)
  44.         {
  45.                 m_tsState = state;
  46.         }

  47.         void SetSession(TsSession* session)
  48.         {
  49.                 m_session = session;
  50.         }

  51.         TsSession* GetSession()
  52.         {
  53.                 return m_session;
  54.         }

  55.         void Release()
  56.         {
  57.                 m_task = NULL;
  58.                 m_session = NULL;
  59.         }

  60.         void SetTask(Task* task)
  61.         {
  62.                 m_task = task;
  63.         }

  64.         Task* GetTask()
  65.         {
  66.                 return m_task;
  67.         }
  68. private:
  69.         string m_tsId;
  70.        
  71. protected:
  72.         TsSession* m_session;
  73.         ServerType m_serverType;
  74.         TsState m_tsState;
  75.         Task* m_task;
  76. };

  77. class DocTransServer : public TransServer
  78. {

  79. public:
  80.         DocTransServer(){}
  81.         DocTransServer(string& id,DocTransType type)
  82.         {
  83.                 SetId(id);
  84.                 m_serverType = DocTrans;
  85.                 m_docTransType = type;
  86.         }
  87. private:
  88.         DocTransType m_docTransType;
  89. };


  90. class VideoTransServer : public TransServer
  91. {
  92. public:
  93.         VideoTransServer(){}
  94.         VideoTransServer(string& id)
  95.         {
  96.                 SetId(id);
  97.                 m_serverType = VideoTrans;
  98.         }
  99. };

  100. class DpptTransServer : public TransServer
  101. {
  102. public:
  103.         DpptTransServer(){}
  104.         DpptTransServer(string& id)
  105.         {
  106.                 SetId(id);
  107.                 m_serverType = DpptTrans;
  108.         }
  109. };


  110. class TransServerDb
  111. {
  112. public:
  113.         virtual TransServer* GetTransServer() = 0;

  114.         void GiveBackTransServer(TransServer *ts)
  115.         {
  116.                 ts->Release();
  117.                 m_transServerBuf.push_back(ts);
  118.         }
  119. protected:
  120.         list<TransServer*> m_transServerBuf;
  121. };

  122. class DocTransServerDb : public TransServerDb
  123. {
  124.         DocTransServerDb(){}
  125. public:
  126.         static DocTransServerDb& GetInstance()
  127.         {
  128.                 static DocTransServerDb instance_;
  129.                 return instance_;
  130.         }
  131.         virtual TransServer* GetTransServer()
  132.         {
  133.                 if(!m_transServerBuf.empty())
  134.                         return m_transServerBuf.front();
  135.                 else
  136.                         return new DocTransServer;               
  137.         }
  138. };

  139. class VideoTransServerDb : public TransServerDb
  140. {
  141.         VideoTransServerDb(){}
  142. public:
  143.         static VideoTransServerDb& GetInstance()
  144.         {
  145.                 static VideoTransServerDb instance_;
  146.                 return instance_;
  147.         }
  148.         virtual TransServer* GetTransServer()
  149.         {
  150.                 if(!m_transServerBuf.empty())
  151.                         return m_transServerBuf.front();
  152.                 else
  153.                         return new VideoTransServer;               
  154.         }
  155. };

  156. class DpptTransServerDb : public TransServerDb
  157. {
  158.         DpptTransServerDb(){}
  159. public:
  160.         static DpptTransServerDb& GetInstance()
  161.         {
  162.                 static DpptTransServerDb instance_;
  163.                 return instance_;
  164.         }
  165.         virtual TransServer* GetTransServer()
  166.         {
  167.                 if(!m_transServerBuf.empty())
  168.                         return m_transServerBuf.front();
  169.                 else
  170.                         return new DpptTransServer;               
  171.         }
  172. };

  173. #endif
 楼主| keer_zu 发表于 2016-6-8 11:51 | 显示全部楼层
TransServer.cpp



  1. #include "TransServer.h"


 楼主| keer_zu 发表于 2016-6-8 11:53 | 显示全部楼层
TsManager.h


  1. #ifndef __TS_MANAGER_H__
  2. #define __TS_MANAGER_H__

  3. #include "Message.h"
  4. #include "TsInterface.h"

  5. typedef enum
  6. {

  7.         TS_DOCUMENT_LINUX = 0,

  8.         TS_DOCUMENT_OFFICE = 1,

  9.         TS_DOCUMENT_WPS = 2,

  10.         TS_VIDEO = 3,

  11.         TS_DYNAMIC_PPT =4

  12. } TsType;


  13. typedef enum
  14. {
  15.         TS_HEAVY = 0,
  16.         TS_LIGHT = 1
  17. }TsProperty;

  18. class AddTransServer;

  19. class TsRegister : public ITsRegister
  20. {
  21.         AddTransServer *m_addTransServer;
  22. public:
  23.         TsRegister();
  24.         virtual void OnRegister(Json::Value& value,TsSession *session);
  25. };

  26. class AddTransServer
  27. {
  28.         AddTransServer *next;
  29. protected:
  30.         TsQueue *m_tsQueue;
  31.         string m_serverType;

  32. public:
  33.         AddTransServer();
  34.         void AddTsTransaction(Json::Value& value,TsSession*);
  35.         void setNext(AddTransServer *n)
  36.         {
  37.                 next = n;
  38.         }
  39.         void add(AddTransServer *n)
  40.         {
  41.                 if (next)
  42.                         next->add(n);
  43.                 else
  44.                         next = n;
  45.         }
  46.         virtual void AddSpacificTransServer(Json::Value& value,TsSession*session)
  47.         {
  48.                 if(next != NULL)
  49.                         next->AddSpacificTransServer(value,session);
  50.                 else {   // this command does not exist;
  51.                         printf("error");
  52.                         // TODO: log
  53.                 }
  54.         }

  55. };

  56. class AddDocTransServer : public AddTransServer
  57. {
  58. public:
  59.         AddDocTransServer();
  60.         //static AddDocTransServer& GetInstance();
  61.         virtual void AddSpacificTransServer(Json::Value& value,TsSession*TsSession);
  62. };

  63. class AddOpenofficeTransServer : public AddDocTransServer
  64. {
  65.         AddOpenofficeTransServer();
  66. public:
  67.         static AddOpenofficeTransServer& GetInstance();
  68.         virtual void AddSpacificTransServer(Json::Value& value,TsSession*TsSession);
  69. };


  70. class AddWpsTransServer : public AddDocTransServer
  71. {
  72.         AddWpsTransServer();
  73. public:
  74.         static AddWpsTransServer& GetInstance();
  75.         virtual void AddSpacificTransServer(Json::Value& value,TsSession*TsSession);
  76. };

  77. class AddOfficeTransServer : public AddDocTransServer
  78. {
  79.         AddOfficeTransServer();
  80. public:
  81.         static AddOfficeTransServer& GetInstance();
  82.         virtual void AddSpacificTransServer(Json::Value& value,TsSession*TsSession);
  83. };


  84. class AddVideoTransServer : public AddTransServer
  85. {
  86.         AddVideoTransServer();
  87. public:
  88.         static AddVideoTransServer& GetInstance();
  89.         virtual void AddSpacificTransServer(Json::Value& value,TsSession*TsSession);
  90. };


  91. class AddDpptTransServer : public AddTransServer
  92. {
  93.         AddDpptTransServer();
  94. public:
  95.         static AddDpptTransServer& GetInstance();
  96.         virtual void AddSpacificTransServer(Json::Value& value,TsSession*TsSession);
  97. };

  98. class TsLeaveHandler;

  99. class TransServerLeave : public ITsServerLeave
  100. {
  101.         TransServerLeave();
  102.         TsLeaveHandler* m_tsLeaveHandler;
  103. public:
  104.         static TransServerLeave& GetInstance();
  105.         virtual void OnServerLeave(TsSession &session);
  106. };

  107. class TsLeaveHandler
  108. {
  109.         TsLeaveHandler* next;
  110. protected:
  111.         TsQueue* m_tsQueue;
  112.         TransServerDb* m_tsDb;
  113.         Disptacher* m_disptacher;
  114. public:
  115.         TransServer* FindSession(TsSession* session);
  116.         void setNext(TsLeaveHandler *n)
  117.         {
  118.                 next = n;
  119.         }
  120.         void add(TsLeaveHandler *n)
  121.         {
  122.                 if (next)
  123.                         next->add(n);
  124.                 else
  125.                         next = n;
  126.         }
  127.         virtual void SpacificTsLeave(TsSession* TsSession)
  128.         {
  129.                 if(next != NULL)
  130.                         next->SpacificTsLeave(TsSession);
  131.                 else {   // this command does not exist;
  132.                         printf("error");
  133.                         // TODO: log
  134.                 }
  135.         }

  136.         void ProcessTsAndTask(TransServer *ts)
  137.         {
  138.                 Task* task;
  139.                
  140.                 m_tsQueue->DelTs(ts);
  141.                 ts->SetState(TsIdle);
  142.                 ts->SetSession(NULL);
  143.                 ts->Release();

  144.                 m_tsDb->GiveBackTransServer(ts);

  145.                 task = ts->GetTask();
  146.                 m_disptacher->Submit(task);
  147.         }

  148. };

  149. class TsDocLeaveHandler : public TsLeaveHandler
  150. {
  151. public:
  152.         TsDocLeaveHandler()
  153.         {

  154.         }
  155. };

  156. class TsOpenofficeLeaveHandler : public TsDocLeaveHandler
  157. {
  158.         TsOpenofficeLeaveHandler();
  159. public:
  160.         static TsOpenofficeLeaveHandler& GetInstance();

  161.         virtual void SpacificTsLeave(TsSession* session);
  162. };

  163. class TsWpsLeaveHandler : public TsDocLeaveHandler
  164. {
  165.         TsWpsLeaveHandler();
  166. public:
  167.         static TsWpsLeaveHandler& GetInstance();

  168.         virtual void SpacificTsLeave(TsSession* session);
  169. };

  170. class TsOfficeLeaveHandler : public TsDocLeaveHandler
  171. {
  172.         TsOfficeLeaveHandler();
  173. public:
  174.         static TsOfficeLeaveHandler& GetInstance();

  175.         virtual void SpacificTsLeave(TsSession* session);
  176. };


  177. class TsVideoLeaveHandler : public TsLeaveHandler
  178. {
  179.         TsVideoLeaveHandler();
  180. public:
  181.         static TsVideoLeaveHandler& GetInstance();

  182.         virtual void SpacificTsLeave(TsSession* session);
  183. };



  184. class TsDpptLeaveHandler : public TsLeaveHandler
  185. {
  186.         TsDpptLeaveHandler();
  187. public:
  188.         static TsDpptLeaveHandler& GetInstance();

  189.         virtual void SpacificTsLeave(TsSession* session);
  190. };


  191. #endif

 楼主| keer_zu 发表于 2016-6-8 11:53 | 显示全部楼层
TsManager.cpp


  1. #include "TsManager.h"


  2. extern  TsQueue GVideoTsQueue;
  3. extern  TsQueue GDocOpenofficeTsQueue;
  4. extern  TsQueue GDocWpsTsQueue;
  5. extern  TsQueue GDocOfficeTsQueue;
  6. extern  TsQueue GDpptTsQueue;
  7. /////////////////////// TsRegister ////////////////////

  8. TsRegister::TsRegister()
  9. {
  10.         m_addTransServer = &AddOpenofficeTransServer::GetInstance();
  11.         m_addTransServer->add(&AddWpsTransServer::GetInstance());
  12.         m_addTransServer->add(&AddOfficeTransServer::GetInstance());
  13.         m_addTransServer->add(&AddVideoTransServer::GetInstance());
  14.         m_addTransServer->add(&AddDpptTransServer::GetInstance());
  15. }

  16. void TsRegister::OnRegister(Json::Value& value,TsSession *session)
  17. {
  18.         m_addTransServer->AddSpacificTransServer(value,session);
  19. }

  20. ////////////////////// AddTransServer /////////////////////
  21. AddTransServer::AddTransServer()
  22. {

  23. }
  24. void AddTransServer::AddTsTransaction(Json::Value & value, TsSession* session)
  25. {
  26.         TsRegistMessage* regMessage;
  27.         TsMessage* message;
  28.         int errorCode;
  29.         string errorDetail;
  30.         string msg;
  31.        
  32.         message = TsMessageDb::GetInstance().GetMessage(TsRegistMsg,m_serverType);
  33.         if(!message){
  34.                 // TODO:log
  35.                 return;
  36.         }
  37.        
  38.         if(regMessage = dynamic_cast<TsRegistMessage *>(message)){
  39.                
  40.         } else {
  41.                 // TODO:log
  42.                 return;
  43.         }
  44.        
  45.        
  46.         if(m_tsQueue->CheckSameTs(value["id"].asString())){
  47.                 errorCode = 1;  // TODO:
  48.                 errorDetail = "Repeat ts id!";
  49.                 regMessage->BuildResponse(errorCode,errorDetail,msg);
  50.                 session->SendMessage(msg);
  51.         } else {

  52.                 TransServer* ts = VideoTransServerDb::GetInstance().GetTransServer();
  53.                 m_tsQueue->PushTs(ts);
  54.                 errorCode = 0;
  55.                 errorDetail = "";
  56.                 regMessage->BuildResponse(errorCode,errorDetail,msg);
  57.                 session->SendMessage(msg);
  58.                
  59.         }

  60. }

  61. ///////////////////// AddDocTransServer //////////////////

  62. AddDocTransServer::AddDocTransServer()
  63. {
  64.        
  65. }

  66. void AddDocTransServer::AddSpacificTransServer(Json::Value& value,TsSession*session)
  67. {

  68. }

  69. ///////////////////AddOpenofficeTransServer /////////////////
  70. AddOpenofficeTransServer::AddOpenofficeTransServer()
  71. {
  72.         m_tsQueue = &GDocOfficeTsQueue;
  73.         m_serverType = "DOC";
  74. }

  75. AddOpenofficeTransServer& AddOpenofficeTransServer::GetInstance()
  76. {
  77.         static  AddOpenofficeTransServer instance_;
  78.         return instance_;        
  79. }

  80. void AddOpenofficeTransServer::AddSpacificTransServer(Json::Value& value,TsSession*session)
  81. {
  82.        
  83.         if(value["servertype"] == m_serverType){
  84.                 AddTsTransaction(value,session);

  85.         } else {
  86.                 AddTransServer::AddSpacificTransServer(value,session);
  87.         }
  88. }

  89. ///////////////////AddWpsTransServer /////////////////
  90. AddWpsTransServer::AddWpsTransServer()
  91. {
  92.         m_tsQueue = &GDocWpsTsQueue;
  93.         m_serverType = "DOC_WPS";
  94. }

  95. AddWpsTransServer& AddWpsTransServer::GetInstance()
  96. {
  97.         static  AddWpsTransServer instance_;
  98.         return instance_;        
  99. }

  100. void AddWpsTransServer::AddSpacificTransServer(Json::Value& value,TsSession*session)
  101. {
  102.        
  103.         if(value["servertype"] == m_serverType){
  104.                
  105.                 AddTsTransaction(value,session);

  106.         } else {
  107.                 AddTransServer::AddSpacificTransServer(value,session);
  108.         }
  109. }

  110. ///////////////////AddOfficeTransServer /////////////////
  111. AddOfficeTransServer::AddOfficeTransServer()
  112. {
  113.         m_tsQueue = &GDocWpsTsQueue;
  114.         m_serverType = "DOC_WINDOWS";
  115. }

  116. AddOfficeTransServer& AddOfficeTransServer::GetInstance()
  117. {
  118.         static  AddOfficeTransServer instance_;
  119.         return instance_;        
  120. }

  121. void AddOfficeTransServer::AddSpacificTransServer(Json::Value& value,TsSession*session)
  122. {

  123.         if(value["servertype"] == m_serverType){
  124.                 AddTsTransaction(value,session);

  125.         } else {
  126.                 AddTransServer::AddSpacificTransServer(value,session);
  127.         }
  128. }

  129. //////////////////// AddVideoTransServer ///////////////////

  130. AddVideoTransServer::AddVideoTransServer()
  131. {
  132.         m_tsQueue = &GVideoTsQueue;
  133.         m_serverType = "VIDEO";
  134. }

  135. AddVideoTransServer& AddVideoTransServer::GetInstance()
  136. {
  137.         static  AddVideoTransServer instance_;
  138.         return instance_;        
  139. }

  140. void AddVideoTransServer::AddSpacificTransServer(Json::Value& value,TsSession* session)
  141. {
  142.        
  143.         if(value["servertype"].asString() == m_serverType){

  144.                 AddTsTransaction(value,session);

  145.         } else {
  146.                 AddTransServer::AddSpacificTransServer(value,session);
  147.         }
  148. }

  149. ////////////////////// AddDpptTransServer //////////////////

  150. AddDpptTransServer::AddDpptTransServer()
  151. {
  152.         m_tsQueue = &GDpptTsQueue;
  153.         m_serverType = "DYNAMIC_PPT";
  154. }

  155. AddDpptTransServer& AddDpptTransServer::GetInstance()
  156. {
  157.         static  AddDpptTransServer instance_;
  158.         return instance_;        
  159. }

  160. void AddDpptTransServer::AddSpacificTransServer(Json::Value& value,TsSession*session)
  161. {
  162.         if(value["servertype"] == m_serverType){
  163.                 AddTsTransaction(value,session);

  164.         } else {
  165.                 AddTransServer::AddSpacificTransServer(value,session);
  166.         }
  167. }

  168. ///////////////////// TsServerLeave  ////////////////////////////

  169. TransServerLeave::TransServerLeave()
  170. {
  171.         m_tsLeaveHandler = &TsVideoLeaveHandler::GetInstance();
  172.         m_tsLeaveHandler->add(&TsOpenofficeLeaveHandler::GetInstance());
  173.         m_tsLeaveHandler->add(&TsOfficeLeaveHandler::GetInstance());
  174.         m_tsLeaveHandler->add(&TsWpsLeaveHandler::GetInstance());
  175.         m_tsLeaveHandler->add(&TsDpptLeaveHandler::GetInstance());
  176. }

  177. TransServerLeave& TransServerLeave::GetInstance()
  178. {
  179.         static  TransServerLeave instance_;
  180.         return instance_;        
  181. }

  182. void TransServerLeave::OnServerLeave(TsSession &session)
  183. {

  184. }

  185. //////////////////////////////// TsLeaveHandler //////////////////////////////
  186. TransServer* TsLeaveHandler::FindSession(TsSession* session)
  187. {
  188.         return m_tsQueue->GetTransServer(session);
  189. }
  190. ////////////////////////// TsOpenofficeLeaveHandler ///////////////////////////
  191. TsOpenofficeLeaveHandler::TsOpenofficeLeaveHandler()
  192. {
  193.         m_tsQueue = &GDocOpenofficeTsQueue;
  194.         m_tsDb = &DocTransServerDb::GetInstance();
  195.         m_disptacher = &DocDisptacher::GetInstance();
  196. }

  197. TsOpenofficeLeaveHandler& TsOpenofficeLeaveHandler::GetInstance()
  198. {
  199.         static TsOpenofficeLeaveHandler instance_;
  200.         return instance_;

  201. }


  202. void TsOpenofficeLeaveHandler::SpacificTsLeave(TsSession* session)
  203. {
  204.         TransServer* ts;
  205.        
  206.         ts = FindSession(session);
  207.         if(ts != NULL){
  208.                 ProcessTsAndTask(ts);
  209.         } else {
  210.                 TsLeaveHandler::SpacificTsLeave(session);
  211.         }
  212. }


  213. ////////////////////////// TsOfficeLeaveHandler ///////////////////////////
  214. TsOfficeLeaveHandler::TsOfficeLeaveHandler()
  215. {
  216.         m_tsQueue = &GDocOfficeTsQueue;
  217.         m_tsDb = &DocTransServerDb::GetInstance();
  218.         m_disptacher = &DocDisptacher::GetInstance();
  219. }

  220. TsOfficeLeaveHandler& TsOfficeLeaveHandler::GetInstance()
  221. {
  222.         static TsOfficeLeaveHandler instance_;
  223.         return instance_;

  224. }


  225. void TsOfficeLeaveHandler::SpacificTsLeave(TsSession* session)
  226. {
  227.         TransServer* ts;
  228.        
  229.         if(ts = FindSession(session)){
  230.                 ProcessTsAndTask(ts);
  231.         } else {
  232.                 TsLeaveHandler::SpacificTsLeave(session);
  233.         }
  234. }

  235. ////////////////////////// TsWpsLeaveHandler ///////////////////////////
  236. TsWpsLeaveHandler::TsWpsLeaveHandler()
  237. {
  238.         m_tsQueue = &GDocWpsTsQueue;
  239.         m_tsDb = &DocTransServerDb::GetInstance();
  240.         m_disptacher = &DocDisptacher::GetInstance();
  241. }

  242. TsWpsLeaveHandler& TsWpsLeaveHandler::GetInstance()
  243. {
  244.         static TsWpsLeaveHandler instance_;
  245.         return instance_;

  246. }



  247. void TsWpsLeaveHandler::SpacificTsLeave(TsSession* session)
  248. {
  249.         TransServer* ts;
  250.        
  251.         if(ts = FindSession(session)){
  252.                 ProcessTsAndTask(ts);
  253.         } else {
  254.                 TsLeaveHandler::SpacificTsLeave(session);
  255.         }
  256. }



  257. /////////////////////////// TsVideoLeaveHandler //////////////////////////////
  258. TsVideoLeaveHandler::TsVideoLeaveHandler()
  259. {
  260.         m_tsQueue = &GVideoTsQueue;
  261.         m_tsDb = &VideoTransServerDb::GetInstance();
  262.         m_disptacher = &VideoDisptacher::GetInstance();
  263. }

  264. TsVideoLeaveHandler& TsVideoLeaveHandler::GetInstance()
  265. {
  266.         static TsVideoLeaveHandler instance_;
  267.         return instance_;
  268. }


  269. void TsVideoLeaveHandler::SpacificTsLeave(TsSession* session)
  270. {
  271.         TransServer* ts;
  272.        
  273.         if(ts = FindSession(session)){
  274.                 ProcessTsAndTask(ts);
  275.         } else {
  276.                 TsLeaveHandler::SpacificTsLeave(session);
  277.         }
  278. }

  279. /////////////////////////// TsDpptLeaveHandler ////////////////////////////////
  280. TsDpptLeaveHandler::TsDpptLeaveHandler()
  281. {
  282.         m_tsQueue = &GDpptTsQueue;
  283.         m_tsDb = &DpptTransServerDb::GetInstance();
  284.         m_disptacher = &DpptDisptacher::GetInstance();
  285. }

  286. TsDpptLeaveHandler& TsDpptLeaveHandler::GetInstance()
  287. {
  288.         static TsDpptLeaveHandler instance_;
  289.         return instance_;
  290. }


  291. void TsDpptLeaveHandler::SpacificTsLeave(TsSession* session)
  292. {
  293.         TransServer* ts;
  294.        
  295.         if(ts = FindSession(session)){
  296.                 ProcessTsAndTask(ts);
  297.         } else {
  298.                 TsLeaveHandler::SpacificTsLeave(session);
  299.         }
  300. }

 楼主| keer_zu 发表于 2016-6-8 11:54 | 显示全部楼层
TsQueue.h


  1. #ifndef __TS_QUEUE_H__
  2. #define __TS_QUEUE_H__

  3. #include <list>
  4. #include "TransServer.h"

  5. class TsQueue
  6. {
  7. public:
  8.         bool PushTs(TransServer* ts);
  9.         TransServer* GetTsInSpecId(string tsId);
  10.         bool DelTs(string tsId);
  11.         bool DelTs(TransServer *ts);
  12.         bool CheckSameTs(string tsId);

  13.         TransServer* GetTsIdle();
  14.         TransServer* GetTransServer(TsSession* session);
  15. private:
  16.         list<TransServer *> m_tsList;
  17. };



  18. #endif
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1482

主题

12925

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部