예제 #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 create_state_response(
        call_state: phone_pb2.CallState.State) -> phone_pb2.StreamCallResponse:
    response = phone_pb2.StreamCallResponse()
    response.call_state.state = call_state
    return response