|
|
|
@ -98,22 +98,14 @@ loop): |
|
|
|
|
batch_operation_tag.event(c_event) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def _handle_rpc(_AioServerState server_state, RPCState rpc_state, object loop): |
|
|
|
|
# Finds the method handler (application logic) |
|
|
|
|
cdef object method_handler = _find_method_handler( |
|
|
|
|
rpc_state, |
|
|
|
|
server_state.generic_handlers |
|
|
|
|
) |
|
|
|
|
if method_handler.request_streaming or method_handler.response_streaming: |
|
|
|
|
raise NotImplementedError() |
|
|
|
|
|
|
|
|
|
async def _handle_unary_unary_rpc(object method_handler, RPCState rpc_state, object loop): |
|
|
|
|
# Receives request message |
|
|
|
|
cdef tuple receive_ops = ( |
|
|
|
|
ReceiveMessageOperation(_EMPTY_FLAGS), |
|
|
|
|
) |
|
|
|
|
await callback_start_batch(rpc_state, receive_ops, loop) |
|
|
|
|
|
|
|
|
|
# Parses the request |
|
|
|
|
# Deserializes the request message |
|
|
|
|
cdef bytes request_raw = receive_ops[0].message() |
|
|
|
|
cdef object request_message |
|
|
|
|
if method_handler.request_deserializer: |
|
|
|
@ -121,8 +113,10 @@ async def _handle_rpc(_AioServerState server_state, RPCState rpc_state, object l |
|
|
|
|
else: |
|
|
|
|
request_message = request_raw |
|
|
|
|
|
|
|
|
|
# Executes application logic & encodes response message |
|
|
|
|
# Executes application logic |
|
|
|
|
cdef object response_message = await method_handler.unary_unary(request_message, _ServicerContextPlaceHolder()) |
|
|
|
|
|
|
|
|
|
# Serializes the response message |
|
|
|
|
cdef bytes response_raw |
|
|
|
|
if method_handler.response_serializer: |
|
|
|
|
response_raw = method_handler.response_serializer(response_message) |
|
|
|
@ -139,6 +133,26 @@ async def _handle_rpc(_AioServerState server_state, RPCState rpc_state, object l |
|
|
|
|
await callback_start_batch(rpc_state, send_ops, loop) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def _handle_rpc(_AioServerState server_state, RPCState rpc_state, object loop): |
|
|
|
|
# Finds the method handler (application logic) |
|
|
|
|
cdef object method_handler = _find_method_handler( |
|
|
|
|
rpc_state, |
|
|
|
|
server_state.generic_handlers |
|
|
|
|
) |
|
|
|
|
if method_handler is None: |
|
|
|
|
# TODO(lidiz) return unimplemented error to client side |
|
|
|
|
raise NotImplementedError() |
|
|
|
|
# TODO(lidiz) extend to all 4 types of RPC |
|
|
|
|
if method_handler.request_streaming or method_handler.response_streaming: |
|
|
|
|
raise NotImplementedError() |
|
|
|
|
else: |
|
|
|
|
await _handle_unary_unary_rpc( |
|
|
|
|
method_handler, |
|
|
|
|
rpc_state, |
|
|
|
|
loop |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def _server_call_request_call(_AioServerState server_state, object loop): |
|
|
|
|
cdef grpc_call_error error |
|
|
|
|
cdef RPCState rpc_state = RPCState() |
|
|
|
|