刘威 há 5 meses atrás
pai
commit
5c30ecb8f8
1 ficheiros alterados com 53 adições e 50 exclusões
  1. 53 50
      src/core/callcenter/esl/client.py

+ 53 - 50
src/core/callcenter/esl/client.py

@@ -373,63 +373,66 @@ class InboundClient:
         self.is_stopping = True
 
 
+class ESLRequestHandler(socketserver.BaseRequestHandler):
+    def setup(self):
+        try:
+            self.logger.info('%s connected!', self.client_address)
+            fd = self.request.fileno()
+            con = ESL.ESLconnection(fd)
+            self.logger.info('Connected: %s', con.connected())
+            if con.connected():
+                info = con.getInfo()
+
+                # print(json.loads(info.serialize('json')))
+                event_name = info.getHeader("Event-Name")
+                device_id = info.getHeader("unique-id")
+                kwargs = json.loads(info.serialize('json'))
+                destination = self.agent.register(**kwargs)
+                self.logger.info("device_id=%s, destination=%s", device_id, destination)
+
+                Cache.add_device_user_part(device_id, destination)
+                con.execute("bridge", f"user/{destination}", device_id)
+
+                # destination = "user/1001"
+                # msg = ESL.ESLevent("sendmsg", uuid)
+                # msg.addHeader("call-command", "execute")
+                # msg.addHeader("execute-app-name", "bridge")
+                # msg.addHeader("execute-app-arg", destination)
+                # # 发送消息以执行 bridge 操作
+                # con.sendEvent(msg)
+                # print(f"Call {uuid} is bridged to {destination}")
+
+                # con.execute("answer", "", uuid)
+
+                # con.execute("transfer", "1001 XML default", uuid)
+                # try:
+                #     con.disconnect()
+                # except:
+                #     print('come in ')
+                #     traceback.print_exc()
+            else:
+                self.logger.info("Failed to connect to FreeSWITCH")
+        except:
+            traceback.print_exc()
+
+
+class CustomTCPServer(socketserver.TCPServer):
+    def __init__(self, server_address, RequestHandlerClass, agent, logger):
+        self.agent = agent
+        self.logger = logger
+        super().__init__(server_address, RequestHandlerClass)
+
+
 class OutboundClient:
 
     def __init__(self, agent, logger):
         self.bot_agent = agent
         self.logger = logger
-        threading.Thread(target=self.start, args=()).start()
-
-    class ESLRequestHandler(socketserver.BaseRequestHandler):
-        def setup(self):
-            try:
-                self.client.logger.info('%s connected!', self.client_address)
-                fd = self.request.fileno()
-                con = ESL.ESLconnection(fd)
-                self.client.logger.info('Connected: %s', con.connected())
-                if con.connected():
-                    info = con.getInfo()
-
-                    # print(json.loads(info.serialize('json')))
-                    event_name = info.getHeader("Event-Name")
-                    device_id = info.getHeader("unique-id")
-                    kwargs = json.loads(info.serialize('json'))
-                    destination = self.client.bot_agent.register(**kwargs)
-                    self.client.logger.info("device_id=%s, destination=%s", device_id, destination)
-
-                    Cache.add_device_user_part(device_id, destination)
-                    con.execute("bridge", f"user/{destination}", device_id)
-
-                    # destination = "user/1001"
-                    # msg = ESL.ESLevent("sendmsg", uuid)
-                    # msg.addHeader("call-command", "execute")
-                    # msg.addHeader("execute-app-name", "bridge")
-                    # msg.addHeader("execute-app-arg", destination)
-                    # # 发送消息以执行 bridge 操作
-                    # con.sendEvent(msg)
-                    # print(f"Call {uuid} is bridged to {destination}")
-
-                    # con.execute("answer", "", uuid)
-
-                    # con.execute("transfer", "1001 XML default", uuid)
-                    # try:
-                    #     con.disconnect()
-                    # except:
-                    #     print('come in ')
-                    #     traceback.print_exc()
-                else:
-                    self.client.logger.info("Failed to connect to FreeSWITCH")
-            except:
-                traceback.print_exc()
-
-    class CustomTCPServer(socketserver.TCPServer):
-        def __init__(self, server_address, RequestHandlerClass, client):
-            self.client = client
-            socketserver.TCPServer.__init__(server_address, RequestHandlerClass)
+        threading.Thread(target=self.start, args=('0.0.0.0', 8084, agent, logger)).start()
 
-    def start(self, HOST='0.0.0.0', PORT=8084):
+    def start(self, HOST='0.0.0.0', PORT=8084, agent=None, logger=None):
         # HOST, PORT = "0.0.0.0", 8084
         # 创建一个 TCP 服务器
-        with self.CustomTCPServer(server_address=(HOST, PORT), RequestHandlerClass=self.ESLRequestHandler, client=self) as server:
+        with CustomTCPServer((HOST, PORT), ESLRequestHandler, agent, logger) as server:
             self.logger.info(f"ESL server listening on {HOST}:{PORT}")
             server.serve_forever()