blob: 39199b1fd5880c2a51d66abc268a6fcfefa02778 [file] [log] [blame]
Jan Tattermusch8496efa2016-03-22 11:34:09 -07001#region Copyright notice and license
2
Jan Tattermuschacb842c2016-03-25 16:54:14 -07003// Copyright 2015-2016, Google Inc.
Jan Tattermusch8496efa2016-03-22 11:34:09 -07004// All rights reserved.
5//
6// Redistribution and use in source and binary forms, with or without
7// modification, are permitted provided that the following conditions are
8// met:
9//
10// * Redistributions of source code must retain the above copyright
11// notice, this list of conditions and the following disclaimer.
12// * Redistributions in binary form must reproduce the above
13// copyright notice, this list of conditions and the following disclaimer
14// in the documentation and/or other materials provided with the
15// distribution.
16// * Neither the name of Google Inc. nor the names of its
17// contributors may be used to endorse or promote products derived from
18// this software without specific prior written permission.
19//
20// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
32#endregion
33
34using System.Threading.Tasks;
35using Grpc.Core.Internal;
36
37namespace Grpc.Core
38{
39 /// <summary>
40 /// Abstraction of client-side RPC invocation.
41 /// </summary>
42 /// <seealso cref="Calls"/>
43 public abstract class CallInvoker
44 {
45 /// <summary>
46 /// Invokes a simple remote call in a blocking fashion.
47 /// </summary>
Jan Tattermuschb455bcc2016-03-22 16:08:18 -070048 public abstract TResponse BlockingUnaryCall<TRequest, TResponse>(Method<TRequest, TResponse> method, string host, CallOptions options, TRequest request)
Jan Tattermusch8496efa2016-03-22 11:34:09 -070049 where TRequest : class
50 where TResponse : class;
51
52 /// <summary>
53 /// Invokes a simple remote call asynchronously.
54 /// </summary>
Jan Tattermuschb455bcc2016-03-22 16:08:18 -070055 public abstract AsyncUnaryCall<TResponse> AsyncUnaryCall<TRequest, TResponse>(Method<TRequest, TResponse> method, string host, CallOptions options, TRequest request)
Jan Tattermusch8496efa2016-03-22 11:34:09 -070056 where TRequest : class
57 where TResponse : class;
58
59 /// <summary>
60 /// Invokes a server streaming call asynchronously.
61 /// In server streaming scenario, client sends on request and server responds with a stream of responses.
62 /// </summary>
Jan Tattermuschb455bcc2016-03-22 16:08:18 -070063 public abstract AsyncServerStreamingCall<TResponse> AsyncServerStreamingCall<TRequest, TResponse>(Method<TRequest, TResponse> method, string host, CallOptions options, TRequest request)
Jan Tattermusch8496efa2016-03-22 11:34:09 -070064 where TRequest : class
65 where TResponse : class;
66
67 /// <summary>
68 /// Invokes a client streaming call asynchronously.
69 /// In client streaming scenario, client sends a stream of requests and server responds with a single response.
70 /// </summary>
Jan Tattermuschb455bcc2016-03-22 16:08:18 -070071 public abstract AsyncClientStreamingCall<TRequest, TResponse> AsyncClientStreamingCall<TRequest, TResponse>(Method<TRequest, TResponse> method, string host, CallOptions options)
Jan Tattermusch8496efa2016-03-22 11:34:09 -070072 where TRequest : class
73 where TResponse : class;
74
75 /// <summary>
76 /// Invokes a duplex streaming call asynchronously.
77 /// In duplex streaming scenario, client sends a stream of requests and server responds with a stream of responses.
78 /// The response stream is completely independent and both side can be sending messages at the same time.
79 /// </summary>
Jan Tattermuschb455bcc2016-03-22 16:08:18 -070080 public abstract AsyncDuplexStreamingCall<TRequest, TResponse> AsyncDuplexStreamingCall<TRequest, TResponse>(Method<TRequest, TResponse> method, string host, CallOptions options)
Jan Tattermusch8496efa2016-03-22 11:34:09 -070081 where TRequest : class
82 where TResponse : class;
83 }
84}