-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathBox.cs
132 lines (109 loc) · 4.31 KB
/
Box.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
using System.Threading.Tasks;
using ProGaudi.Tarantool.Client.Model;
using ProGaudi.Tarantool.Client.Model.Requests;
using ProGaudi.Tarantool.Client.Model.Responses;
namespace ProGaudi.Tarantool.Client
{
public class Box : IBox
{
private readonly ClientOptions _clientOptions;
private readonly ILogicalConnection _logicalConnection;
public Box(ClientOptions options)
{
_clientOptions = options;
TarantoolConvertersRegistrator.Register(options.MsgPackContext);
_logicalConnection = new LogicalConnectionManager(options);
Metrics = new Metrics(_logicalConnection);
}
public Task Connect()
{
return _logicalConnection.Connect();
}
public static async Task<Box> Connect(string replicationSource)
{
var box = new Box(new ClientOptions(replicationSource));
await box.Connect();
return box;
}
public Metrics Metrics
{
get;
}
public bool IsConnected
{
get
{
return _logicalConnection.IsConnected();
}
}
public static Task<Box> Connect(string host, int port)
{
return Connect($"{host}:{port}");
}
public static Task<Box> Connect(string host, int port, string user, string password)
{
return Connect($"{user}:{password}@{host}:{port}");
}
public void Dispose()
{
_clientOptions.LogWriter?.WriteLine("Box is disposing...");
_clientOptions.LogWriter?.Flush();
_logicalConnection.Dispose();
}
public ISchema GetSchema()
{
_clientOptions.LogWriter?.WriteLine("Schema acquiring...");
return new Schema(_logicalConnection);
}
public Task Call_1_6(string functionName)
{
return Call_1_6<TarantoolTuple, TarantoolTuple>(functionName, TarantoolTuple.Empty);
}
public Task Call_1_6<TTuple>(string functionName, TTuple parameters)
where TTuple : ITarantoolTuple
{
return Call_1_6<TTuple, TarantoolTuple>(functionName, parameters);
}
public Task<DataResponse<TResponse[]>> Call_1_6<TResponse>(string functionName)
where TResponse : ITarantoolTuple
{
return Call_1_6<TarantoolTuple, TResponse>(functionName, TarantoolTuple.Empty);
}
public Task<DataResponse<TResponse[]>> Call_1_6<TTuple, TResponse>(string functionName, TTuple parameters)
where TTuple : ITarantoolTuple
where TResponse : ITarantoolTuple
{
var callRequest = new CallRequest<TTuple>(functionName, parameters, false);
return _logicalConnection.SendRequest<CallRequest<TTuple>, TResponse>(callRequest);
}
public Task Call(string functionName)
{
return Call<TarantoolTuple, TarantoolTuple>(functionName, TarantoolTuple.Empty);
}
public Task Call<TTuple>(string functionName, TTuple parameters)
where TTuple : ITarantoolTuple
{
return Call<TTuple, TarantoolTuple>(functionName, parameters);
}
public Task<DataResponse<TResponse[]>> Call<TResponse>(string functionName)
{
return Call<TarantoolTuple, TResponse>(functionName, TarantoolTuple.Empty);
}
public Task<DataResponse<TResponse[]>> Call<TTuple, TResponse>(string functionName, TTuple parameters)
where TTuple : ITarantoolTuple
{
var callRequest = new CallRequest<TTuple>(functionName, parameters);
return _logicalConnection.SendRequest<CallRequest<TTuple>, TResponse>(callRequest);
}
public Task<DataResponse<TResponse[]>> Eval<TTuple, TResponse>(string expression, TTuple parameters)
where TTuple : ITarantoolTuple
{
var evalRequest = new EvalRequest<TTuple>(expression, parameters);
return _logicalConnection.SendRequest<EvalRequest<TTuple>, TResponse>(evalRequest);
}
public Task<DataResponse<TResponse[]>> Eval<TResponse>(string expression)
{
return Eval<TarantoolTuple, TResponse>(expression, TarantoolTuple.Empty);
}
}
}