15 from concurrent.futures
import ThreadPoolExecutor
19 from typing
import Iterable
29 call_state: phone_pb2.CallState.State) -> phone_pb2.StreamCallResponse:
31 response.call_state.state = call_state
46 call_info.media =
"https://link.to.audio.resources"
47 logging.info(
"Created a call session [%s]",
MessageToJson(call_info))
51 logging.info(
"Call session cleaned [%s]",
MessageToJson(call_info))
54 self, request_iterator: Iterable[phone_pb2.StreamCallRequest],
56 ) -> Iterable[phone_pb2.StreamCallResponse]:
58 request =
next(request_iterator)
59 logging.info(
"Received a phone call request for number [%s]",
62 raise RuntimeError(
"Failed to receive call request")
71 response.call_info.session_id = call_info.session_id
72 response.call_info.media = call_info.media
78 logging.info(
"Call finished [%s]", request.phone_number)
81 def serve(address: str) ->
None:
84 server.add_insecure_port(address)
86 logging.info(
"Server serving at %s", address)
87 server.wait_for_termination()
90 if __name__ ==
"__main__":
91 logging.basicConfig(level=logging.INFO)