Commit e15e93137dfcc1f1fe22d31ff0a0984b9d8622c7

Authored by Cédric RICARD
1 parent 0ddf58bc

Improving usability of net_services functions

Fix naming error (STATUS_STR -> STATUS_MSG in ACK message)
calexium_lib/net_services/CXM_generic_client.anubis
... ... @@ -32,6 +32,9 @@ public type NetServiceAnswer:
32 32 // --Generic functions---------------------------------------------------------------------
33 33  
34 34  
  35 +/**
  36 + * Sends the message to the server then parses the answer and returns the RESULT message on CMD success.
  37 + */
35 38 public define Maybe(NetServiceAnswer)
36 39 generic_send_message
37 40 (
... ... @@ -57,40 +60,63 @@ public define Maybe(NetServiceAnswer)
57 60 if v = _CXM_OK then
58 61 success(netservice_ok(cmd, find_message(msg, "RESULT")))
59 62 else
60   - with error_string = if find_string(msg, "STATUS_STR") is success(s) then s else "",
  63 + with error_string = if find_string(msg, "STATUS_MSG") is success(s) then s else "",
61 64 success(netservice_error(cmd, v, error_string))
62 65 }
63 66 }
64 67 }.
65 68  
66 69 public define Maybe($T)
67   - generic_handler
  70 + simple_handler
68 71 (
69 72 MessageQueue queue,
70 73 Int timeout,
71 74 Message msg_to_send,
72 75 (Message) -> Maybe($T) handler,
73 76 (String) -> One logger
74   - )=
75   - queue.add_Message_to_send(msg_to_send);
76   - if queue.get_next_received_Message(timeout) is
  77 + ) =
  78 + if generic_send_message(queue, msg_to_send, timeout, logger) is
77 79 {
78   - timeout then logger("["+queue.get_name(unique)+"]: receive timeout");failure,
79   - closed then logger("["+queue.get_name(unique)+"]: socket closed");failure,
80   - msg(msg) then
81   - if find_int32(msg, "STATUS") is
  80 + failure then failure,
  81 + success(net_result) then
  82 + if net_result is
82 83 {
83   - failure then logger("["+queue.get_name(unique)+"]: status not found");failure,
84   - success(v) then
85   - if v = _CXM_OK then
86   - //println("generic_handler("+queue.get_name(unique)+"): message status ok");
87   - if find_message(msg, "RESULT") is
88   - {
89   - failure then logger("["+queue.get_name(unique)+"]: can't find RESULT");failure,
90   - success(result) then handler(result)
91   - }
92   - else
93   - logger("["+queue.get_name(unique)+"]: message status ERROR");failure
  84 + netservice_error(cmd, err_code, err_str) then
  85 + logger("["+queue.get_name(unique)+"]: message status ERROR [0x" + to_hexa(err_code) + ", '" + err_str + "']");
  86 + failure,
  87 + netservice_ok(cmd, mb_msg) then
  88 + if mb_msg is
  89 + {
  90 + failure then logger("["+queue.get_name(unique)+"]: can't find RESULT message."); failure,
  91 + success(result) then handler(result)
  92 + }
  93 + }
  94 + }.
  95 +
  96 +public define Maybe(One)
  97 + no_result_handler
  98 + (
  99 + MessageQueue queue,
  100 + Int timeout,
  101 + Message msg_to_send,
  102 + (String) -> One logger
  103 + ) =
  104 + if generic_send_message(queue, msg_to_send, timeout, logger) is
  105 + {
  106 + failure then failure,
  107 + success(net_result) then
  108 + if net_result is
  109 + {
  110 + netservice_error(cmd, err_code, err_str) then
  111 + logger("["+queue.get_name(unique)+"]: message status ERROR [0x" + to_hexa(err_code) + ", '" + err_str + "']");
  112 + failure,
  113 + netservice_ok(cmd, mb_msg) then
  114 + if mb_msg is
  115 + {
  116 + failure then unique,
  117 + success(result) then logger("An unattended RESULT msg was found. Ignoring it...")
  118 + };
  119 + success(unique)
94 120 }
95 121 }.
96 122  
... ... @@ -103,7 +129,7 @@ public define (MessageQueue, String) -> Maybe($T)
103 129 (String) -> One logger
104 130 ) =
105 131 (MessageQueue queue, String timestamp) |->
106   - generic_handler(queue, timeout, msg_to_send, handler, logger).
  132 + simple_handler(queue, timeout, msg_to_send, handler, logger).
107 133  
108 134 define Maybe($T)
109 135 generic_request_for_service
... ...
calexium_lib/net_services/CXM_generic_protocol.anubis
... ... @@ -18,6 +18,7 @@ public define Word32 _CXM_OK = 0.
18 18 public define Word32 _CXM_ERROR = 1.
19 19 public define Word32 _CXM_UNKNOW_CMD = 2.
20 20 public define Word32 _CXM_UNKNOW_SERVICE = 3.
  21 +public define Word32 _CXM_MISSING_REQUIRED_FIELD = 4.
21 22  
22 23 public type ProtocolResult:
23 24 failure,
... ... @@ -38,7 +39,7 @@ public define One
38 39 with err_msg = message(_CXM_ACK),
39 40 forget(add_int32(err_msg, "CMD", cmd_id));
40 41 forget(add_int32(err_msg, "STATUS", error_code));
41   - (if error_string /= "" then forget(add_string(err_msg, "STATUS_STR", error_string))
  42 + (if error_string /= "" then forget(add_string(err_msg, "STATUS_MSG", error_string))
42 43 else unique);
43 44 forget(queue.add_Message_to_send(err_msg)).
44 45  
... ...