service_manager.py 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. # -*- coding:utf-8 -*-
  2. import os
  3. import sys
  4. import time
  5. from multiprocessing import Process
  6. import thread
  7. from multiprocessing.connection import Listener, Client
  8. from ssat_sdk.core.ibinder_listener import *
  9. from ccard_service import *
  10. from tg39_service import *
  11. from chroma_22293_service import *
  12. from redrat_service import *
  13. from sound_service import *
  14. from TC_UB530_service import *
  15. from ssat_sdk.utils import string_util
  16. import subprocess
  17. serviceConfig = ServiceConfig()
  18. class ServiceManager():
  19. def __init__(self):
  20. self.ccardService = None
  21. self.tg39Service = None
  22. self.c22293Service = None
  23. self.redratService = None
  24. self.soundService = None
  25. self.ub530Service = None
  26. self.errMsg = ""
  27. def initService(self, service_name):
  28. print u"启动Service:", service_name
  29. if CCardService.Service_Name == service_name:
  30. self.ccardService = CCardService()
  31. staus, msg = self.ccardService.initCCard()
  32. if staus == 0:
  33. self.errMsg = msg
  34. elif TG39Service.Service_Name == service_name:
  35. self.tg39Service = TG39Service()
  36. staus, msg = self.tg39Service.initTG39()
  37. if staus == 0:
  38. self.errMsg = msg
  39. elif C22293Service.Service_Name == service_name:
  40. self.c22293Service = C22293Service()
  41. staus, msg = self.c22293Service.initC22293()
  42. if staus == 0:
  43. self.errMsg = msg
  44. elif RedRatService.Service_Name == service_name:
  45. self.redratService = RedRatService()
  46. staus, msg = self.redratService.initRedRat()
  47. if staus == 0:
  48. self.errMsg = msg
  49. elif SoundCollectionService.Service_Name == service_name:
  50. self.soundService = SoundCollectionService()
  51. staus, msg = self.soundService.initSoundCollection()
  52. if staus == 0:
  53. self.errMsg = msg
  54. elif string_util.strcmp(TC_UB530Service.Service_Name, service_name):
  55. baseDir = os.path.dirname(__file__)
  56. exe = os.path.join(baseDir, "TC_UB530_service.py")
  57. cmd = "python " + exe + " " + str(os.getpid())
  58. self.ub530Service = subprocess.Popen(cmd)
  59. # self.ub530Service = TC_UB530Service()
  60. # self.ub530Service.startService()
  61. print u"退出Service:", service_name
  62. def startSDKServer(self):
  63. print u"启动SDK服务"
  64. self.onOff = True
  65. self.service_process = Process(target=self.startBGServer, args=())
  66. self.service_process.start()
  67. def startSDKServer2(self):
  68. print u"启动SDK服务"
  69. self.onOff = True
  70. self.startServerTerminal()
  71. def startServerTerminal(self):
  72. print u"启动Server控制台"
  73. inline = ""
  74. while inline <> "exit":
  75. print u"输入命令:"
  76. inline = raw_input()
  77. if inline.__len__() < 1:
  78. continue
  79. self.parseCmd(inline)
  80. def startBGServer(self):
  81. print u"已启动后台服务进程"
  82. # 采用listener监听服务指令
  83. while (True):
  84. binder = ListenerBinder(port=30500)
  85. self.listener, port = binder.createListener()
  86. serviceConfig.setSDKListenerPort(port)
  87. conn = self.listener.accept()
  88. cmd = conn.recv()
  89. self.parseCmd(cmdLine=cmd)
  90. # print u"服务指令:",cmd
  91. conn.send(u"指令完成")
  92. def parseCmd(self, cmdLine):
  93. print u"SDK服务接受指令:", cmdLine
  94. cmdParam = self.rmNULFrom(cmdLine.split(" "))
  95. if (cmdParam.__len__() < 2):
  96. print u"请输入正确命令"
  97. return False
  98. command = cmdParam[0]
  99. param = cmdParam[1]
  100. self.excuteCmd(command, param)
  101. def excuteCmd(self, command, param):
  102. if (command == "start"):
  103. self.startServiceThread(param)
  104. def startServiceThread(self, service_name):
  105. if (service_name == CCardService.Service_Name):
  106. if (self.ccardService == None) or (self.ccardService.getStatus() == 0):
  107. thread.start_new_thread(
  108. self.initService, (CCardService.Service_Name,))
  109. else:
  110. print u"视频采集卡已经启动"
  111. elif (service_name == TG39Service.Service_Name):
  112. if self.tg39Service == None or (self.tg39Service.status == 0):
  113. thread.start_new_thread(
  114. self.initService, (TG39Service.Service_Name,))
  115. else:
  116. print u"TG39已经启动"
  117. elif (service_name == C22293Service.Service_Name):
  118. if self.c22293Service == None or (self.c22293Service.status == 0):
  119. thread.start_new_thread(
  120. self.initService, (C22293Service.Service_Name,))
  121. else:
  122. print u"c22293已经启动"
  123. elif (service_name == "all"):
  124. if self.ccardService == None or (self.ccardService.status == 0):
  125. thread.start_new_thread(
  126. self.initService, (CCardService.Service_Name,))
  127. else:
  128. print u"视频采集卡已经启动"
  129. if self.tg39Service == None or (self.tg39Service.status == 0):
  130. thread.start_new_thread(
  131. self.initService, (TG39Service.Service_Name,))
  132. else:
  133. print u"TG39已经启动"
  134. elif (service_name == RedRatService.Service_Name):
  135. if self.redratService == None or (self.redratService.status == 0):
  136. thread.start_new_thread(
  137. self.initService, (RedRatService.Service_Name,))
  138. else:
  139. print u"红老鼠已经启动"
  140. elif (service_name == SoundCollectionService.Service_Name):
  141. if self.soundService == None or (self.soundService.status == 0):
  142. thread.start_new_thread(
  143. self.initService, (SoundCollectionService.Service_Name,))
  144. else:
  145. print u"声音采集器已经启动"
  146. elif (service_name == TC_UB530Service.Service_Name):
  147. # self.initService(TC_UB530Service.Service_Name)
  148. if self.ub530Service is None:
  149. thread.start_new_thread(
  150. self.initService, (TC_UB530Service.Service_Name,))
  151. else:
  152. print u"UB530视频采集器已经启动"
  153. '''
  154. return:0代表设备服务不可用,1代表设备服务正常运行;-1 代表没有此类设备。
  155. '''
  156. def getServiceStatus(self, service_name):
  157. if TG39Service.Service_Name == service_name:
  158. if self.tg39Service == None or (self.tg39Service.status == 0):
  159. return 0
  160. else:
  161. return 1
  162. elif CCardService.Service_Name == service_name:
  163. if self.ccardService == None or self.ccardService.status == 0:
  164. return 0
  165. else:
  166. return 1
  167. elif C22293Service.Service_Name == service_name:
  168. if self.c22293Service == None or self.c22293Service.status == 0:
  169. return 0
  170. else:
  171. return 1
  172. elif RedRatService.Service_Name == service_name:
  173. if self.redratService == None or self.redratService.status == 0:
  174. return 0
  175. else:
  176. return 1
  177. elif (service_name == TC_UB530Service.Service_Name):
  178. # self.initService(TC_UB530Service.Service_Name)
  179. if self.ub530Service is None and self.ub530Service.poll() is None:
  180. return 0
  181. else:
  182. return 1
  183. return -1
  184. def rmNULFrom(self, strArr):
  185. destArr = []
  186. for i in range(strArr.__len__()):
  187. item = strArr[i]
  188. if (item <> ''):
  189. destArr.append(item)
  190. return destArr
  191. class ServiceClient():
  192. def __init__(self):
  193. print u"初始化Server控制台"
  194. self.port = serviceConfig.getSDKListenerPort()
  195. def startTerminal(self):
  196. print u"启动Server控制台"
  197. inline = ""
  198. while inline <> "exit":
  199. print u"输入命令:"
  200. inline = raw_input()
  201. if inline.__len__() < 1:
  202. continue
  203. self.executeCommand(inline)
  204. def executeCommand(self, inline):
  205. # print u"执行命令:", inline
  206. conn = Client(("localhost", self.port), authkey="sat")
  207. conn.send(inline)
  208. result = conn.recv()
  209. print u"执行结果:", result
  210. conn.close()
  211. if __name__ == "__main__":
  212. # if (sys.argv.__len__() > 1) and ("server" == sys.argv[1]):
  213. # sManager = ServiceManager()
  214. # sManager.startSDKServer()
  215. # elif (sys.argv.__len__() > 1) and ("client" == sys.argv[1]):
  216. # sClient = ServiceClient()
  217. # sClient.startTerminal()
  218. # else:
  219. # sManager = ServiceManager()
  220. # sManager.startSDKServer2()
  221. sManager = ServiceManager()
  222. sManager.startServiceThread("ub530")
  223. while 1:
  224. pass