GrpcClient.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import time
  2. import grpc
  3. import def_pb2 as pb
  4. import def_pb2_grpc as mrpc
  5. import threading
  6. def singleton(cls):
  7. _instance = {}
  8. def inner():
  9. if cls not in _instance:
  10. _instance[cls] = cls()
  11. return _instance[cls]
  12. return inner
  13. @singleton
  14. class GrpcStream(threading.Thread):
  15. def __init__(self):
  16. threading.Thread.__init__(self)
  17. self.exit_=False
  18. self.features_=None
  19. self.measures_=None
  20. self.imagesCallBack=None
  21. self.cloudCallBack=None
  22. self.MeasureDataCallBack=None
  23. def SetDataCallBack(self,ImagesCallback,CloudsCallBack,MeasureDataCallback):
  24. self.imagesCallBack=ImagesCallback
  25. self.cloudCallBack=CloudsCallBack
  26. self.MeasureDataCallBack=MeasureDataCallback
  27. def GrabImage(self,ip,port,id): # id:1-4,其他表示所有
  28. connectstr='%s:%d'%(ip,port)
  29. self.channel=grpc.insecure_channel(connectstr)
  30. self.stub = mrpc.StreamServerStub(self.channel)
  31. cmd=pb.RequestCmd()
  32. cmd.Id=id
  33. try:
  34. resImage=self.stub.GetImage(cmd)
  35. if self.imagesCallBack is not None:
  36. self.imagesCallBack(resImage)
  37. except Exception as e:
  38. print(e)
  39. def GrabCloud(self,ip,port,id): # id:1-4,其他表示所有
  40. connectstr='%s:%d'%(ip,port)
  41. self.channel=grpc.insecure_channel(connectstr)
  42. self.stub = mrpc.StreamServerStub(self.channel)
  43. cmd=pb.RequestCmd()
  44. cmd.Id=id
  45. try:
  46. resCloud=self.stub.GetCloud(cmd)
  47. if self.cloudCallBack is not None:
  48. self.cloudCallBack(resCloud)
  49. except Exception as e:
  50. print(e)
  51. def OpenDataStream(self,ip,port):
  52. connectstr='%s:%d'%(ip,port)
  53. channel=grpc.insecure_channel(connectstr)
  54. stub = mrpc.StreamServerStub(channel)
  55. cmd=pb.RequestCmd()
  56. self.measures_ = stub.OpenMeasureDataStream(cmd)
  57. def CloseDataStream(self,ip,port):
  58. connectstr='%s:%d'%(ip,port)
  59. channel=grpc.insecure_channel(connectstr)
  60. stub = mrpc.StreamServerStub(channel)
  61. cmd=pb.RequestCmd()
  62. stub.CloseMeasureDataStream(cmd)
  63. def OpenImageStream(self,ip,port):
  64. connectstr='%s:%d'%(ip,port)
  65. channel=grpc.insecure_channel(connectstr)
  66. stub = mrpc.StreamServerStub(channel)
  67. cmd=pb.RequestCmd()
  68. self.features_ = stub.OpenImageStream(cmd)
  69. def CloseImageStream(self,ip,port):
  70. connectstr='%s:%d'%(ip,port)
  71. channel=grpc.insecure_channel(connectstr)
  72. stub = mrpc.StreamServerStub(channel)
  73. cmd=pb.RequestCmd()
  74. stub.CloseImageStream(cmd)
  75. def loopImageStream(self):
  76. if self.features_ is not None:
  77. try:
  78. for feature in self.features_: #流式返回的结果
  79. if self.imagesCallBack is not None:
  80. self.imagesCallBack(feature)
  81. break
  82. except Exception as e:
  83. self.features_=None
  84. def loopDataStream(self):
  85. if self.measures_ is not None:
  86. try:
  87. for measure in self.measures_:
  88. if self.MeasureDataCallBack is not None:
  89. self.MeasureDataCallBack(measure)
  90. break
  91. except Exception as e:
  92. if self.MeasureDataCallBack is not None:
  93. info=pb.MeasureInfo()
  94. info.error=str(e)
  95. self.MeasureDataCallBack(info)
  96. self.measures_=None
  97. def run(self):
  98. while self.exit_==False:
  99. time.sleep(0.001)
  100. self.loopImageStream()
  101. self.loopDataStream()
  102. print(" close ")
  103. def close(self):
  104. self.exit_=True
  105. self.join()