| // Copyright 2019 TiKV Project Authors. Licensed under Apache-2.0. |
| |
| use crate::call::server::{RequestContext, UnaryRequestContext}; |
| use crate::call::{BatchContext, Call}; |
| use crate::cq::CompletionQueue; |
| use crate::server::{self, RequestCallContext}; |
| |
| pub struct Request { |
| ctx: RequestContext, |
| } |
| |
| impl Request { |
| pub fn new(rc: RequestCallContext) -> Request { |
| let ctx = RequestContext::new(rc); |
| Request { ctx } |
| } |
| |
| pub fn context(&self) -> &RequestContext { |
| &self.ctx |
| } |
| |
| pub fn resolve(mut self, cq: &CompletionQueue, success: bool) { |
| let mut rc = self.ctx.take_request_call_context().unwrap(); |
| if !success { |
| server::request_call(rc, cq); |
| return; |
| } |
| |
| match self.ctx.handle_stream_req(cq, &mut rc) { |
| Ok(_) => server::request_call(rc, cq), |
| Err(ctx) => ctx.handle_unary_req(rc, cq), |
| } |
| } |
| } |
| |
| pub struct UnaryRequest { |
| ctx: UnaryRequestContext, |
| } |
| |
| impl UnaryRequest { |
| pub fn new(ctx: RequestContext, rc: RequestCallContext) -> UnaryRequest { |
| let ctx = UnaryRequestContext::new(ctx, rc); |
| UnaryRequest { ctx } |
| } |
| |
| pub fn batch_ctx(&self) -> &BatchContext { |
| self.ctx.batch_ctx() |
| } |
| |
| pub fn request_ctx(&self) -> &RequestContext { |
| self.ctx.request_ctx() |
| } |
| |
| pub fn resolve(mut self, cq: &CompletionQueue, success: bool) { |
| let mut rc = self.ctx.take_request_call_context().unwrap(); |
| if !success { |
| server::request_call(rc, cq); |
| return; |
| } |
| |
| let reader = self.ctx.batch_ctx_mut().recv_message(); |
| self.ctx.handle(&mut rc, cq, reader); |
| server::request_call(rc, cq); |
| } |
| } |
| |
| /// A callback to wait for status for the aborted rpc call to be sent. |
| pub struct Abort { |
| ctx: BatchContext, |
| _call: Call, |
| } |
| |
| impl Abort { |
| pub fn new(call: Call) -> Abort { |
| Abort { |
| ctx: BatchContext::new(), |
| _call: call, |
| } |
| } |
| |
| pub fn batch_ctx(&self) -> &BatchContext { |
| &self.ctx |
| } |
| } |