Dreamine.Communication.Core
1.0.2
Dreamine.Communication.Core 통신 기능과 관련 API를 제공합니다.
Toggle main menu visibility
로딩중...
검색중...
일치하는것 없음
RawJsonProtocolAdapter.cs
이 파일의 문서화 페이지로 가기
1
using
System.Text;
2
using
System.Text.Json;
3
using
Dreamine.Communication.Abstractions.Interfaces;
4
using
Dreamine.Communication.Abstractions.Models;
5
6
namespace
Dreamine.Communication.Core.Protocols
;
7
16
public
sealed
class
RawJsonProtocolAdapter
: IMessageProtocolAdapter
17
{
26
private
readonly Encoding
_encoding
;
35
private
readonly
string
_defaultRoute
;
44
private
readonly
string
_defaultName
;
45
54
public
RawJsonProtocolAdapter
()
55
: this(new
RawJsonProtocolOptions
())
56
{
57
}
58
91
public
RawJsonProtocolAdapter
(
string
defaultRoute,
string
defaultName)
92
: this(new
RawJsonProtocolOptions
93
{
94
DefaultRoute = defaultRoute,
95
DefaultName = defaultName
96
})
97
{
98
}
99
148
public
RawJsonProtocolAdapter
(
149
Encoding encoding,
150
string
defaultRoute,
151
string
defaultName)
152
: this(new
RawJsonProtocolOptions
153
{
154
Encoding = encoding ??
throw
new
ArgumentNullException(nameof(encoding)),
155
DefaultRoute = defaultRoute,
156
DefaultName = defaultName
157
})
158
{
159
}
160
193
public
RawJsonProtocolAdapter
(
RawJsonProtocolOptions
options)
194
{
195
ArgumentNullException.ThrowIfNull(options);
196
ArgumentException.ThrowIfNullOrWhiteSpace(options.
DefaultRoute
);
197
ArgumentException.ThrowIfNullOrWhiteSpace(options.
DefaultName
);
198
199
_encoding
= options.Encoding ??
throw
new
ArgumentNullException(nameof(options.
Encoding
));
200
_defaultRoute
= options.
DefaultRoute
;
201
_defaultName
= options.
DefaultName
;
202
NormalizePayloadToUtf8
= options.
NormalizePayloadToUtf8
;
203
}
204
213
public
bool
NormalizePayloadToUtf8
{
get
; }
214
255
public
MessageEnvelope
Decode
(
byte
[] payload)
256
{
257
ArgumentNullException.ThrowIfNull(payload);
258
259
var json =
_encoding
.GetString(payload);
260
string
route;
261
string
name;
262
263
using
(var document = JsonDocument.Parse(json))
264
{
265
var root = document.RootElement;
266
267
route =
TryGetString
(root,
"route"
)
268
??
TryGetString
(root,
"Route"
)
269
??
TryGetString
(root,
"routingKey"
)
270
??
TryGetString
(root,
"topic"
)
271
??
TryGetString
(root,
"type"
)
272
??
TryGetString
(root,
"cmd"
)
273
??
_defaultRoute
;
274
275
name =
TryGetString
(root,
"name"
)
276
??
TryGetString
(root,
"Name"
)
277
??
TryGetString
(root,
"type"
)
278
??
TryGetString
(root,
"cmd"
)
279
??
_defaultName
;
280
}
281
282
return
new
MessageEnvelope
283
{
284
Name = name,
285
Route = route,
286
Payload =
NormalizePayloadToUtf8
287
? Encoding.UTF8.GetBytes(json)
288
:
_encoding
.GetBytes(json),
289
Headers =
new
Dictionary<string, string>
290
{
291
[
"ContentType"
] =
"application/json"
,
292
[
"Protocol"
] =
"RawJson"
,
293
[
"ExternalEncoding"
] = _encoding.WebName
294
}
295
};
296
}
297
330
public
byte
[]
Encode
(MessageEnvelope message)
331
{
332
ArgumentNullException.ThrowIfNull(message);
333
334
if
(message.Payload.Length > 0)
335
{
336
var json = Encoding.UTF8.GetString(message.Payload);
337
return
_encoding
.GetBytes(json);
338
}
339
340
var generatedJson = JsonSerializer.Serialize(
new
341
{
342
name = message.Name,
343
route = message.Route
344
});
345
346
return
_encoding
.GetBytes(generatedJson);
347
}
348
381
private
static
string
?
TryGetString
(JsonElement root,
string
propertyName)
382
{
383
if
(!root.TryGetProperty(propertyName, out var property))
384
{
385
return
null
;
386
}
387
388
return
property.ValueKind == JsonValueKind.String
389
?
property
.GetString()
390
:
property
.ToString();
391
}
392
}
Dreamine.Communication.Core.Protocols
Definition
DreamineEnvelopeProtocolAdapter.cs:5
Dreamine.Communication.Core.Protocols.RawJsonProtocolAdapter.NormalizePayloadToUtf8
bool NormalizePayloadToUtf8
Definition
RawJsonProtocolAdapter.cs:213
Dreamine.Communication.Core.Protocols.RawJsonProtocolAdapter._defaultRoute
readonly string _defaultRoute
Definition
RawJsonProtocolAdapter.cs:35
Dreamine.Communication.Core.Protocols.RawJsonProtocolAdapter.TryGetString
static ? string TryGetString(JsonElement root, string propertyName)
Definition
RawJsonProtocolAdapter.cs:381
Dreamine.Communication.Core.Protocols.RawJsonProtocolAdapter.RawJsonProtocolAdapter
RawJsonProtocolAdapter(RawJsonProtocolOptions options)
Definition
RawJsonProtocolAdapter.cs:193
Dreamine.Communication.Core.Protocols.RawJsonProtocolAdapter._defaultName
readonly string _defaultName
Definition
RawJsonProtocolAdapter.cs:44
Dreamine.Communication.Core.Protocols.RawJsonProtocolAdapter.Decode
MessageEnvelope Decode(byte[] payload)
Definition
RawJsonProtocolAdapter.cs:255
Dreamine.Communication.Core.Protocols.RawJsonProtocolAdapter._encoding
readonly Encoding _encoding
Definition
RawJsonProtocolAdapter.cs:26
Dreamine.Communication.Core.Protocols.RawJsonProtocolAdapter.RawJsonProtocolAdapter
RawJsonProtocolAdapter()
Definition
RawJsonProtocolAdapter.cs:54
Dreamine.Communication.Core.Protocols.RawJsonProtocolAdapter.RawJsonProtocolAdapter
RawJsonProtocolAdapter(Encoding encoding, string defaultRoute, string defaultName)
Definition
RawJsonProtocolAdapter.cs:148
Dreamine.Communication.Core.Protocols.RawJsonProtocolAdapter.RawJsonProtocolAdapter
RawJsonProtocolAdapter(string defaultRoute, string defaultName)
Definition
RawJsonProtocolAdapter.cs:91
Dreamine.Communication.Core.Protocols.RawJsonProtocolAdapter.Encode
byte[] Encode(MessageEnvelope message)
Definition
RawJsonProtocolAdapter.cs:330
Dreamine.Communication.Core.Protocols.RawJsonProtocolOptions
Definition
RawJsonProtocolOptions.cs:14
Dreamine.Communication.Core.Protocols.RawJsonProtocolOptions.Encoding
Encoding Encoding
Definition
RawJsonProtocolOptions.cs:23
Dreamine.Communication.Core.Protocols.RawJsonProtocolOptions.DefaultRoute
string DefaultRoute
Definition
RawJsonProtocolOptions.cs:33
Dreamine.Communication.Core.Protocols.RawJsonProtocolOptions.NormalizePayloadToUtf8
bool NormalizePayloadToUtf8
Definition
RawJsonProtocolOptions.cs:53
Dreamine.Communication.Core.Protocols.RawJsonProtocolOptions.DefaultName
string DefaultName
Definition
RawJsonProtocolOptions.cs:43
Protocols
RawJsonProtocolAdapter.cs
다음에 의해 생성됨 :
1.17.0