84
84
| {static_update_objects , {Clock :: binary (), Properties :: list (), Updates :: [update ()]}}
85
85
| {static_read_objects , {Clock :: binary (), Properties :: list (), Objects :: [bound_object ()]}}
86
86
| {read_objects , {Objects :: [bound_object ()], TxId :: binary ()}}
87
- | {get_connection_descriptor , Descriptor :: binary ()}.
87
+ | {create_dc , NodeNames :: [node ()]}
88
+ | {get_connection_descriptor , Descriptor :: binary ()}
89
+ | {connect_to_dcs , Desriptors :: [binary ()]}.
88
90
89
91
-type response () ::
90
92
{error_response , {ErrorCode :: error_code (), Message :: binary ()}}
@@ -192,7 +194,15 @@ encode_message({static_read_objects_response, {ok, Results, CommitTime}}) ->
192
194
encode_message ({read_objects_response , Resp }) ->
193
195
encode_read_objects_response (Resp );
194
196
encode_message ({operation_response , Resp }) ->
195
- encode_operation_response (Resp ).
197
+ encode_operation_response (Resp );
198
+ encode_message ({get_connection_descriptor }) ->
199
+ encode_get_connection_descriptor ();
200
+ encode_message ({get_connection_descriptor_resp , Resp }) ->
201
+ encode_get_connection_descriptor_resp (Resp );
202
+ encode_message ({create_dc , Nodes }) ->
203
+ encode_create_dc (Nodes );
204
+ encode_message ({connect_to_dcs , Descriptors }) ->
205
+ encode_connect_to_dcs (Descriptors ).
196
206
197
207
-spec decode_message (sendable ()) -> message ().
198
208
decode_message (# 'ApbStartTransaction' {properties = Properties , timestamp = Clock }) ->
@@ -215,11 +225,13 @@ decode_message(#'ApbReadObjects'{boundobjects = Objects, transaction_descriptor
215
225
{read_objects , {[decode_bound_object (O ) || O <- Objects ], binary_to_term (TxId )}};
216
226
217
227
decode_message (# 'ApbCreateDC' {nodes = Nodes }) ->
218
- {create_dc , [list_to_atom ( N ) || N <- Nodes ]};
228
+ {create_dc , [binary_to_atom ( N , utf8 ) || N <- Nodes ]};
219
229
decode_message (# 'ApbGetConnectionDescriptor' {}) ->
220
230
{get_connection_descriptor };
231
+ decode_message (# 'ApbGetConnectionDescriptorResp' {success = false , errorcode = E }) ->
232
+ {get_connection_descriptor_resp , {error , decode_error_code (E )}};
221
233
decode_message (# 'ApbGetConnectionDescriptorResp' {descriptor = Descriptor }) ->
222
- {get_connection_descriptor , Descriptor };
234
+ {get_connection_descriptor_resp , { ok , Descriptor } };
223
235
decode_message (# 'ApbConnectToDCs' {descriptors = Descriptors }) ->
224
236
{connect_to_dcs , [binary_to_term (D ) || D <- Descriptors ]};
225
237
@@ -494,8 +506,12 @@ decode_response(#'ApbStaticReadObjectsResp'{objects = Objects,
494
506
{read_objects , Values } = decode_response (Objects ),
495
507
{commit_transaction , TimeStamp } = decode_response (CommitTime ),
496
508
{static_read_objects_resp , Values , TimeStamp };
509
+ decode_response (# 'ApbGetConnectionDescriptorResp' {success = false , errorcode = E }) ->
510
+ {get_connection_descriptor_resp , {error , decode_error_code (E )}};
511
+ decode_response (# 'ApbGetConnectionDescriptorResp' {descriptor = Descriptor }) ->
512
+ {get_connection_descriptor_resp , {ok , Descriptor }};
497
513
decode_response (Other ) ->
498
- erlang :error (" Unexpected message: ~p " , [ Other ] ).
514
+ erlang :error ({ " Unexpected message:" , Other } ).
499
515
500
516
% %%%%%%%%%%%%%%%%%%%%%
501
517
% % Reading objects
@@ -783,7 +799,12 @@ decode_map_entry(#'ApbMapEntry'{key = KeyEnc, value = ValueEnc}) ->
783
799
% % Cluster Management
784
800
785
801
encode_create_dc (Nodes ) ->
786
- # 'ApbCreateDC' {nodes = Nodes }.
802
+ # 'ApbCreateDC' {nodes = [if
803
+ is_atom (N ) -> atom_to_binary (N , utf8 );
804
+ is_list (N ) -> list_to_binary (N );
805
+ is_binary (N ) -> N ;
806
+ true -> throw ({invalid_node_value , N })
807
+ end || N <- Nodes ]}.
787
808
decode_create_dc (# 'ApbCreateDC' {nodes = Nodes }) ->
788
809
Nodes .
789
810
0 commit comments