1 /**
2 * Whiteboard session manager
3 * Inkboard message context definitions
4 *
5 * Authors:
6 * David Yip <yipdw@rose-hulman.edu>
7 *
8 * Copyright (c) 2005 Authors
9 *
10 * Released under GNU GPL, read the file 'COPYING' for more information
11 */
13 #include "jabber_whiteboard/defines.h"
14 #include "jabber_whiteboard/message-contexts.h"
16 #include <bitset>
18 namespace Inkscape {
20 namespace Whiteboard {
22 void
23 initialize_received_message_contexts(MessageContextMap& mcm)
24 {
26 // Each Inkboard message has a context of validity according to an Inkboard
27 // client's state. That is, certain messages should be acknowledged and processed
28 // in some states, whereas other messages should not.
29 // For instance, a whiteboard invitation should be acknowledged if an Inkboard
30 // client is not in a whiteboard session, but should be refused if said client
31 // _is_ in a whiteboard session.
33 // Only the flags that are required to be set must be set; all flags, by default,
34 // are zero. Explicit definition doesn't hurt, though.
36 // The general format of message context creation and registration is
37 // std::bitset< NUM_FLAGS > m_
38 // m_.set( );
39 // m_.set( );
40 // mcm[ ] = m_;
43 // Begin
45 // Special bitsets
46 std::bitset< NUM_FLAGS > all_contexts;
47 all_contexts.flip();
49 // Messages: CHANGE_NOT_REPEATABLE, CHANGE_REPEATABLE, DUMMY_CHANGE, CHANGE_COMMIT
50 std::bitset< NUM_FLAGS > m1;
51 m1.set(LOGGED_IN);
52 m1.set(IN_WHITEBOARD);
53 m1.set(IN_CHATROOM);
54 m1.set(SYNCHRONIZING_WITH_CHAT);
55 mcm[CHANGE_NOT_REPEATABLE] = m1;
56 mcm[CHANGE_REPEATABLE] = m1;
57 mcm[DUMMY_CHANGE] = m1;
58 mcm[CHANGE_COMMIT] = m1;
60 // Messages: DOCUMENT_BEGIN, DOCUMENT_END
61 std::bitset< NUM_FLAGS > m4;
62 m4.set(LOGGED_IN);
63 m4.set(IN_WHITEBOARD);
64 m4.set(SYNCHRONIZING_WITH_CHAT);
65 mcm[DOCUMENT_BEGIN] = m4;
66 mcm[DOCUMENT_END] = m4;
68 // Message: CONNECT_REQUEST_USER
69 std::bitset< NUM_FLAGS > m5;
70 m5.set(LOGGED_IN);
71 mcm[CONNECT_REQUEST_USER] = m5;
73 // Message: CONNECT_REQUEST_RESPONSE_USER
74 std::bitset< NUM_FLAGS > m6;
75 m6.set(LOGGED_IN);
76 m6.set(WAITING_FOR_INVITE_RESPONSE);
77 mcm[CONNECT_REQUEST_RESPONSE_USER] = m6;
79 // Message: CHATROOM_SYNCHRONIZE_REQUEST
80 std::bitset< NUM_FLAGS > m7;
81 m7.set(LOGGED_IN);
82 m7.set(IN_CHATROOM);
83 m7.set(IN_WHITEBOARD);
84 mcm[CHATROOM_SYNCHRONIZE_REQUEST] = m7;
86 // Message: CHATROOM_SYNCHRONIZE_RESPONSE
87 std::bitset< NUM_FLAGS > m8;
88 m8.set(LOGGED_IN);
89 m8.set(WAITING_TO_SYNC_TO_CHAT);
90 mcm[CHATROOM_SYNCHRONIZE_RESPONSE] = m8;
92 // Message: CONNECT_REQUEST_RESPONSE_CHAT
93 std::bitset< NUM_FLAGS > m9;
94 m9.set(LOGGED_IN);
95 m9.set(IN_CHATROOM);
96 m9.set(IN_WHITEBOARD);
97 mcm[CONNECT_REQUEST_RESPONSE_CHAT] = m9;
99 // Message: CONNECTED_SIGNAL
100 mcm[CONNECTED_SIGNAL] = all_contexts;
102 // Message: DISCONNECTED_FROM_USER_SIGNAL
103 std::bitset< NUM_FLAGS > m11;
104 m11.set(LOGGED_IN);
105 m11.set(IN_WHITEBOARD);
106 mcm[DISCONNECTED_FROM_USER_SIGNAL] = m11;
108 // Messages: CONNECT_REQUEST_REFUSED_BY_PEER, ALREADY_IN_SESSION
109 std::bitset< NUM_FLAGS > m12;
110 m12.set(LOGGED_IN);
111 m12.set(WAITING_FOR_INVITE_RESPONSE);
112 mcm[CONNECT_REQUEST_REFUSED_BY_PEER] = m12;
113 mcm[ALREADY_IN_SESSION] = m12;
115 // Message: UNSUPPORTED_PROTOCOL_VERSION
116 std::bitset< NUM_FLAGS > m14;
117 m14.set(LOGGED_IN);
118 mcm[UNSUPPORTED_PROTOCOL_VERSION] = m14;
119 }
121 }
123 }
125 /*
126 Local Variables:
127 mode:c++
128 c-file-style:"stroustrup"
129 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
130 indent-tabs-mode:nil
131 fill-column:99
132 End:
133 */
134 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :