コード例 #1
0
 def StreamCall(
     self, request_iterator: Iterable[phone_pb2.StreamCallRequest],
     context: grpc.ServicerContext
 ) -> Iterable[phone_pb2.StreamCallResponse]:
     try:
         request = next(request_iterator)
         logging.info("Received a phone call request for number [%s]",
                      request.phone_number)
     except StopIteration:
         raise RuntimeError("Failed to receive call request")
     # Simulate the acceptance of call request
     time.sleep(1)
     yield create_state_response(phone_pb2.CallState.NEW)
     # Simulate the start of the call session
     time.sleep(1)
     call_info = self._create_call_session()
     context.add_callback(lambda: self._clean_call_session(call_info))
     response = phone_pb2.StreamCallResponse()
     response.call_info.session_id = call_info.session_id
     response.call_info.media = call_info.media
     yield response
     yield create_state_response(phone_pb2.CallState.ACTIVE)
     # Simulate the end of the call
     time.sleep(2)
     yield create_state_response(phone_pb2.CallState.ENDED)
     logging.info("Call finished [%s]", request.phone_number)
コード例 #2
0
def register_client(
    client_manager: ClientManager,
    client: GrpcClientProxy,
    context: grpc.ServicerContext,
) -> bool:
    """Try registering GrpcClientProxy with ClientManager."""
    is_success = client_manager.register(client)

    if is_success:

        def rpc_termination_callback():
            client.bridge.close()
            client_manager.unregister(client)

        context.add_callback(rpc_termination_callback)

    return is_success