Commit 90f8df96afcf7139d44f1568a58f7a3d6d8db0da
1 parent
a5322e9e
Removed _CXM_DOMAIN_STORE_NAME for security reason (was an old and no more used message).
Added generic client code
Showing
2 changed files
with
158 additions
and
2 deletions
Show diff stats
calexium_lib/CXM_message_constants.anubis
| ... | ... | @@ -54,7 +54,7 @@ public define Int32 _CXM_LOGGER_LOG = 0x33771802. |
| 54 | 54 | // MF <-> DomainManager |
| 55 | 55 | public define Int32 _CXM_DOMAIN_SERVICE_MSG_BASIS = 0x33771C00. // |
| 56 | 56 | public define Int32 _CXM_DOMAIN_SERVICE_ID = 0x33771C01. |
| 57 | -public define Int32 _CXM_DOMAIN_STORE_NAME = 0x33771C02. | |
| 57 | +//public define Int32 _CXM_DOMAIN_STORE_NAME = 0x33771C02. // No more used (security hole | |
| 58 | 58 | public define Int32 _CXM_DOMAIN_GET_NAME = 0x33771C03. |
| 59 | 59 | public define Int32 _CXM_DOMAIN_GET_MY_IP = 0x33771C04. |
| 60 | 60 | public define Int32 _CXM_DOMAIN_PUBLISH_MY_IP = 0x33771C05. |
| ... | ... | @@ -69,4 +69,4 @@ public define Int32 _CXM_GANDI_CREATE_CONTACT = 0x33771D02. // 'CLASS' (S |
| 69 | 69 | // --> CXM_ACK with 'CONTACT_HANDLE' (String): Created handle for this contact |
| 70 | 70 | public define Int32 _CXM_GANDI_CREATE_DOMAIN = 0x33771D03. // 'DOMAIN' (String): Domain full name |
| 71 | 71 | // 'OWNER' (String): Owner handle |
| 72 | - // --> CXM_ACK | |
| 72 | + // --> CXM_ACK with 'DOMAIN_HANDLE' (String): Created handle for this domain | ... | ... |
calexium_lib/net_services/CXM_generic_client.anubis
0 → 100644
| 1 | +/* | |
| 2 | + * Created by PyramIDE. | |
| 3 | + * User: ricard | |
| 4 | + * Date: 02/02/2008 | |
| 5 | + * Time: 11:47 | |
| 6 | + * | |
| 7 | + * To change this template use Tools | Options | Coding | Edit Standard Headers. | |
| 8 | + */ | |
| 9 | + | |
| 10 | + | |
| 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 | + | |
| 19 | +read calexium_lib/CXM_message_constants.anubis | |
| 20 | +read calexium_lib/net_services/CXM_net_services.anubis | |
| 21 | +read calexium_lib/net_services/CXM_generic_protocol.anubis | |
| 22 | + | |
| 23 | +// --Generic types--------------------------------------------------------------------- | |
| 24 | +public type NetServiceAnswer: | |
| 25 | + netservice_error (Int32 cmd, | |
| 26 | + Int32 result_code, | |
| 27 | + String result_string), | |
| 28 | + netservice_ok (Int32 cmd, | |
| 29 | + Maybe(Message) result_msg). | |
| 30 | + | |
| 31 | +// --Generic functions--------------------------------------------------------------------- | |
| 32 | + | |
| 33 | + | |
| 34 | +public define Maybe(NetServiceAnswer) | |
| 35 | + generic_send_message | |
| 36 | + ( | |
| 37 | + MessageQueue queue, | |
| 38 | + Message msg_to_send, | |
| 39 | + Int32 timeout, | |
| 40 | + (String) -> One logger | |
| 41 | + )= | |
| 42 | + queue.add_Message_to_send(msg_to_send); | |
| 43 | + if queue.get_next_received_Message(timeout) is | |
| 44 | + { | |
| 45 | + timeout then logger("["+queue.get_name(unique)+"]: receive timeout");failure, | |
| 46 | + closed then logger("["+queue.get_name(unique)+"]: socket closed");failure, | |
| 47 | + msg(msg) then | |
| 48 | + if find_int32(msg, "CMD") is | |
| 49 | + { | |
| 50 | + failure then logger("["+queue.get_name(unique)+"]: CMD field not found"); failure, | |
| 51 | + success(cmd) then | |
| 52 | + if find_int32(msg, "STATUS") is | |
| 53 | + { | |
| 54 | + failure then logger("["+queue.get_name(unique)+"]: STATUS field not found"); failure, | |
| 55 | + success(v) then | |
| 56 | + if v = _CXM_OK then | |
| 57 | + success(netservice_ok(cmd, find_message(msg, "RESULT"))) | |
| 58 | + else | |
| 59 | + with error_string = if find_string(msg, "STATUS_STR") is success(s) then s else "", | |
| 60 | + success(netservice_error(cmd, v, error_string)) | |
| 61 | + } | |
| 62 | + } | |
| 63 | + }. | |
| 64 | + | |
| 65 | +define Maybe($T) | |
| 66 | + generic_handler | |
| 67 | + ( | |
| 68 | + MessageQueue queue, | |
| 69 | + Message msg_to_send, | |
| 70 | + (Message) -> Maybe($T) handler, | |
| 71 | + (String) -> One logger | |
| 72 | + )= | |
| 73 | + queue.add_Message_to_send(msg_to_send); | |
| 74 | + if queue.get_next_received_Message(10) is | |
| 75 | + { | |
| 76 | + timeout then logger("["+queue.get_name(unique)+"]: receive timeout");failure, | |
| 77 | + closed then logger("["+queue.get_name(unique)+"]: socket closed");failure, | |
| 78 | + msg(msg) then | |
| 79 | + if find_int32(msg, "STATUS") is | |
| 80 | + { | |
| 81 | + failure then logger("["+queue.get_name(unique)+"]: status not found");failure, | |
| 82 | + success(v) then | |
| 83 | + if v = _CXM_OK then | |
| 84 | + //println("generic_handler("+queue.get_name(unique)+"): message status ok"); | |
| 85 | + if find_message(msg, "RESULT") is | |
| 86 | + { | |
| 87 | + failure then logger("["+queue.get_name(unique)+"]: can't find RESULT");failure, | |
| 88 | + success(result) then handler(result) | |
| 89 | + } | |
| 90 | + else | |
| 91 | + logger("["+queue.get_name(unique)+"]: message status ERROR");failure | |
| 92 | + } | |
| 93 | + }. | |
| 94 | + | |
| 95 | +public define (MessageQueue) -> Maybe($T) | |
| 96 | + make_generic_handler | |
| 97 | + ( | |
| 98 | + Message msg_to_send, | |
| 99 | + (Message) -> Maybe($T) handler, | |
| 100 | + (String) -> One logger | |
| 101 | + ) = | |
| 102 | + (MessageQueue queue) |-> | |
| 103 | + generic_handler(queue, msg_to_send, handler, logger). | |
| 104 | + | |
| 105 | +define Maybe($T) | |
| 106 | + generic_request_for_service | |
| 107 | + ( | |
| 108 | + MessageQueue queue, | |
| 109 | + Int32 service_id, | |
| 110 | + Int32 service_version, | |
| 111 | + (MessageQueue) -> Maybe($T) handler, | |
| 112 | + (String) -> One logger | |
| 113 | + )= | |
| 114 | + with test_msg = message(_CXM_REQUEST_FOR_SERVICE), | |
| 115 | + forget(add_int32(test_msg, "service", service_id)); | |
| 116 | + forget(add_int32(test_msg, "version", service_version)); | |
| 117 | + queue.add_Message_to_send(test_msg); | |
| 118 | + if queue.get_next_received_Message(10) is | |
| 119 | + { | |
| 120 | + timeout then logger("["+queue.get_name(unique)+"]: requesting service receive timeout");failure, | |
| 121 | + closed then logger("["+queue.get_name(unique)+"]: requesting service socket closed");failure, | |
| 122 | + msg(msg) then | |
| 123 | + if find_int32(msg, "STATUS") is | |
| 124 | + { | |
| 125 | + failure then logger("["+queue.get_name(unique)+"]: requesting service status not found");failure, | |
| 126 | + success(v) then | |
| 127 | + if v = _CXM_OK then | |
| 128 | + handler(queue) | |
| 129 | + else | |
| 130 | + logger("["+queue.get_name(unique)+"]: requested service started won't start");failure | |
| 131 | + } | |
| 132 | + }. | |
| 133 | + | |
| 134 | +public define Maybe($T) | |
| 135 | + generic_connect_to_net_service | |
| 136 | + ( | |
| 137 | + String queue_name, | |
| 138 | + Int32 server, | |
| 139 | + Int32 port, | |
| 140 | + Int32 service_id, | |
| 141 | + Int32 service_version, | |
| 142 | + (MessageQueue) -> Maybe($T) handler, | |
| 143 | + (String) -> One logger | |
| 144 | + ) | |
| 145 | + = | |
| 146 | + if connect( server, port) is | |
| 147 | + { | |
| 148 | + error(_) then logger(queue_name + ": Can't connect to domain manager ["+ip_addr_to_string(server)+":"+port+"]");failure, | |
| 149 | + ok(conn) then | |
| 150 | + with queue = create_MessageQueue(queue_name), | |
| 151 | + message_transceiver(conn, queue); | |
| 152 | + with result = generic_request_for_service(queue, service_id, service_version, handler, logger), | |
| 153 | + queue.quit(unique); | |
| 154 | + //logInfo(debug_log,"domain_manager client quit"); | |
| 155 | + result | |
| 156 | + }. | ... | ... |