Commit 726439d3ab9358946ef6efe08a1234471719761e

Authored by totoro
1 parent 27567d6e

add + (plus) operator for DB_ib with String

add Anubix authentication message constant
add get_message_queue_to_net_service. Which connect to remote net_service, apply the given function (like authentication process) and return the message_queue if every thing is success
add generic_request_for_service and generic_send_message with logger name instead of logger function (String s) -> One. This means the UDP logger must be already started by the main application
add class for one_line_fields in CXM_form
CXM_message_constants.anubis
... ... @@ -207,5 +207,6 @@ public define Word32 _CXM_HK_MSG_END = 0x3379FFFF.
207 207  
208 208 public define Word32 _RMT_ANUBIX_MSG_BASIS = 0x33800000.
209 209 public define Word32 _RMT_ANUBIX_CORE_SERVICE_ID = 0x33800000.
  210 +public define Word32 _RMT_ANUBIX_CORE_AUTH = 0x33800001.
210 211  
211 212 public define Word32 _RMT_ANUBIX_MSG_END = 0x3380FFFF.
... ...
database/db_types.anubis
... ... @@ -46,6 +46,16 @@ public define String
46 46 none then "none",
47 47 db_id(_idx) then abs_to_decimal(_idx)
48 48 }.
  49 +
  50 +public define String
  51 + String s + DB_id idx =
  52 + s + to_String(idx)
  53 +.
  54 +
  55 +public define String
  56 + DB_id idx + String s =
  57 + to_String(idx) + s
  58 +.
49 59  
50 60 public define Int
51 61 to_Int
... ...
net_services/CXM_generic_client.anubis
... ... @@ -7,19 +7,12 @@
7 7 *
8 8 */
9 9  
  10 +transmit system/message_transceiver.anubis
  11 +transmit calexium_lib/net_services_protocols/logger_service.anubis
10 12  
11   -read tools/basis.anubis
12   -read system/muscle.anubis
13   -read system/data_io.anubis
14   -read system/convert.anubis
15   -read system/string.anubis
16   -read system/message_queue.anubis
17   -read system/message_transceiver.anubis
18   -read tools/connections.anubis
19   -
20   -read calexium_lib/CXM_message_constants.anubis
21   -read calexium_lib/net_services/CXM_net_services.anubis
22   -read calexium_lib/net_services/CXM_generic_protocol.anubis
  13 +transmit calexium_lib/CXM_message_constants.anubis
  14 +transmit calexium_lib/net_services/CXM_net_services.anubis
  15 +transmit calexium_lib/net_services/CXM_generic_protocol.anubis
23 16  
24 17 // --Generic types---------------------------------------------------------------------
25 18 public type NetServiceAnswer:
... ... @@ -31,7 +24,6 @@ public type NetServiceAnswer:
31 24  
32 25 // --Generic functions---------------------------------------------------------------------
33 26  
34   -
35 27 /**
36 28 * Sends the message to the server then parses the answer and returns the RESULT message on CMD success.
37 29 */
... ... @@ -66,6 +58,42 @@ public define Maybe(NetServiceAnswer)
66 58 }
67 59 }.
68 60  
  61 +
  62 +public define Maybe(NetServiceAnswer)
  63 +/**
  64 + * Sends the message to the server then parses the answer and returns the RESULT message on CMD success.
  65 + *
  66 + */
  67 + generic_send_message
  68 + (
  69 + MessageQueue queue,
  70 + Message msg_to_send,
  71 + Int timeout,
  72 + String logger_name
  73 + )=
  74 + queue.add_Message_to_send(msg_to_send);
  75 + if queue.get_next_received_Message(timeout) is
  76 + {
  77 + timeout then logError(logger_name, "["+queue.get_name(unique)+"]: receive timeout");failure,
  78 + closed then logError(logger_name, "["+queue.get_name(unique)+"]: socket closed");failure,
  79 + msg(msg) then
  80 + if find_int32(msg, "CMD") is
  81 + {
  82 + failure then logError(logger_name, "["+queue.get_name(unique)+"]: CMD field not found"); failure,
  83 + success(cmd) then
  84 + if find_int32(msg, "STATUS") is
  85 + {
  86 + failure then logError(logger_name, "["+queue.get_name(unique)+"]: STATUS field not found"); failure,
  87 + success(v) then
  88 + if v = _CXM_OK then
  89 + success(netservice_ok(cmd, find_message(msg, "RESULT")))
  90 + else
  91 + with error_string = if find_string(msg, "STATUS_MSG") is success(s) then s else "",
  92 + success(netservice_error(cmd, v, error_string))
  93 + }
  94 + }
  95 + }.
  96 +
69 97 public define Maybe($T)
70 98 simple_handler
71 99 (
... ... @@ -173,6 +201,80 @@ define Maybe($T)
173 201 }
174 202 }.
175 203  
  204 +define Maybe($T)
  205 + generic_request_for_service
  206 + (
  207 + MessageQueue queue,
  208 + Word32 service_id,
  209 + Word32 service_version,
  210 + String domain,
  211 + (MessageQueue, String) -> Maybe($T) handler,
  212 + String logger
  213 + )=
  214 + with test_msg = message(_CXM_REQUEST_FOR_SERVICE),
  215 + forget(add_int32(test_msg, "SERVICE", service_id));
  216 + forget(add_int32(test_msg, "VERSION", service_version));
  217 + forget(add_string(test_msg, "DOMAIN", domain));
  218 + queue.add_Message_to_send(test_msg);
  219 + if queue.get_next_received_Message(10) is
  220 + {
  221 + timeout then logError(logger, "["+queue.get_name(unique)+"]: requesting service receive timeout");failure,
  222 + closed then logError(logger, "["+queue.get_name(unique)+"]: requesting service socket closed");failure,
  223 + msg(msg) then
  224 + if find_int32(msg, "STATUS") is
  225 + {
  226 + failure then logError(logger, "["+queue.get_name(unique)+"]: requesting service STATUS not found");failure,
  227 + success(v) then
  228 + if v = _CXM_OK then
  229 + if find_message(msg, "RESULT") is
  230 + {
  231 + failure then logError(logger, "["+queue.get_name(unique)+"]: requesting service RESULT not found");failure,
  232 + success(result) then
  233 + with timestamp = if find_string(result, "TIMESTAMP") is
  234 + {
  235 + failure then logError(logger, "["+queue.get_name(unique)+"]: requesting service TIMESTAMP not found"); "",
  236 + success(timestamp) then timestamp
  237 + },
  238 + handler(queue, timestamp)
  239 + }
  240 + else
  241 + logError(logger, "["+queue.get_name(unique)+"]: the requested service is not available on server.");failure
  242 + }
  243 + }.
  244 +
  245 +public define Maybe(MessageQueue)
  246 + get_message_queue_to_net_service
  247 + (
  248 + String queue_name,
  249 + Word32 server,
  250 + Word32 port,
  251 + Word32 service_id,
  252 + Word32 service_version,
  253 + String domain,
  254 + (MessageQueue, String) -> Maybe(One) handler, //1st function to apply if need (i.e authentication to remote service)
  255 + String logger
  256 + )
  257 + =
  258 + if connect( server, port) is
  259 + {
  260 + error(_) then logError(logger, queue_name + ": Can't connect to service ["+ip_addr_to_string(server)+":"+port+"]");failure,
  261 + ok(conn) then
  262 +// println("[" + virtual_machine_id + "] netservices create queue");
  263 + with queue = create_MessageQueue(queue_name),
  264 + message_transceiver(tcp(conn), queue);
  265 +// println("[" + virtual_machine_id + "] netservices generic_request_for_service()");
  266 + if generic_request_for_service(queue, service_id, service_version, domain, handler, logger) is
  267 + {
  268 + failure then
  269 + //we can't apply first function correctly, so we ask to Message Queue to quit and return failure
  270 + logError(logger, "can't apply first function correctly");
  271 + queue.quit(unique);
  272 + failure,
  273 + success(_) then success(queue)
  274 + }
  275 + }.
  276 +
  277 +
176 278 public define Maybe($T)
177 279 generic_connect_to_net_service
178 280 (
... ...
web/CXM_form.anubis
... ... @@ -317,6 +317,10 @@ public define CXM_Form_Field
317 317 submit(WEB_Action_Name action_name, Maybe(String) label, String button_text, List((String,String)) extra_operands)
318 318 = submit([], htmlClass(""), action_name, label, button_text, extra_operands).
319 319  
  320 +public define CXM_Form_Field
  321 + submit(WEB_Action_Name action_name, Maybe(String) label, String button_text)
  322 + = submit([], htmlClass(""), action_name, label, button_text, []).
  323 +
320 324 public define CXM_Form_Field //Helper for older project wich use only String as Action name
321 325 submit(String _action_name, Maybe(String) label, String button_text, List((String,String)) extra_operands)
322 326 = submit([], htmlClass(""), action_name(_action_name), label, button_text, extra_operands).
... ... @@ -535,7 +539,7 @@ public define HTML_In_Form
535 539 ),
536 540 ]),
537 541 one_line_fields(fields) then
538   - table([nude],[row([],
  542 + table([nude, class("form_one_line")],[row([],
539 543 map((CXM_Form_Field ff2) |-> cell([],format_CXM_Form_Field(ff2, lwa)),fields))])
540 544 ,
541 545  
... ...