CXM_generic_protocol.anubis
1.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/*
*
* User: David RENE
* Date: 25/04/2007
* Time: 16:20
* (c) Calexium
*
*/
read system/muscle.anubis
read system/data_io.anubis
read tools/basis.anubis
read calexium_lib/CXM_message_constants.anubis
public define Int32 _CXM_ERROR = 0.
public define Int32 _CXM_OK = 1.
public define Int32 _CXM_UNKNOW_CMD = 2.
public define One
send_ACK_error
(
RWStream conn,
Int32 cmd_id
)=
with err_msg = message(_CXM_ACK),
forget(add_int32(err_msg, "CMD", cmd_id));
forget(add_int32(err_msg, "STATUS", _CXM_ERROR));
forget(send_message_by_Stream(conn, err_msg))
.
public define One
send_ACK_ok
(
RWStream conn,
Int32 cmd_id
)=
with ok_msg = message(_CXM_ACK),
forget(add_int32(ok_msg, "CMD", cmd_id));
forget(add_int32(ok_msg, "STATUS", _CXM_OK));
forget(send_message_by_Stream(conn, ok_msg))
.
public define One
send_ACK_ok
(
RWStream conn,
Int32 cmd_id,
Message result
)=
with ok_msg = message(_CXM_ACK),
forget(add_int32(ok_msg, "CMD", cmd_id));
forget(add_int32(ok_msg, "STATUS", _CXM_OK));
forget(add_message(ok_msg, "RESULT", result));
forget(send_message_by_Stream(conn, ok_msg))
.
public define One
send_result
(
RWStream conn,
Int32 cmd_id,
Maybe(Message) mb_msg
)=
if mb_msg is
{
failure then send_ACK_error(conn, cmd_id),
success(msg) then send_ACK_ok(conn, cmd_id, msg)
}
.
public define Maybe(Message)
wait_for_reply
(
RWStream conn
) =
if unflatten_message(make_data_io(weaken(conn))) is
{
failure then
sleep(1);
wait_for_reply(conn),
success(msg) then success(msg)
}.