1 /**
2 * Whiteboard message queue
3 *
4 * Authors:
5 * David Yip <yipdw@rose-hulman.edu>
6 *
7 * Copyright (c) 2005 Authors
8 *
9 * Released under GNU GPL, read the file 'COPYING' for more information
10 */
12 #include <glibmm/i18n.h>
14 #include "desktop-handles.h"
15 #include "message-stack.h"
17 #include "jabber_whiteboard/session-manager.h"
18 #include "jabber_whiteboard/message-node.h"
19 #include "jabber_whiteboard/message-queue.h"
21 namespace Inkscape {
23 namespace Whiteboard {
25 //###################################
26 //# MESSAGE QUEUE
27 //###################################
29 MessageNode*
30 MessageQueue::first()
31 {
32 return _queue.front();
33 }
35 void
36 MessageQueue::popFront()
37 {
38 _queue.pop_front();
39 //g_log(NULL, G_LOG_LEVEL_DEBUG,
40 // "Removed element, queue size (for %s): %u",
41 //lm_connection_get_jid(this->_sm->session_data->connection), this->_queue.size());
42 }
44 unsigned int
45 MessageQueue::size()
46 {
47 return _queue.size();
48 }
50 bool
51 MessageQueue::empty()
52 {
53 return _queue.empty();
54 }
56 void
57 MessageQueue::clear()
58 {
59 _queue.clear();
60 }
64 //###################################
65 //# RECEIVE MESSAGE QUEUE
66 //###################################
67 void
68 ReceiveMessageQueue::insert(MessageNode* msg)
69 {
70 // Check to see if the incoming message has a sequence number
71 // lower than the sequence number of the latest message processed
72 // by this message's sender. If it does, drop the message and produce
73 // a warning.
74 if (msg->sequence() < _latest) {
75 g_warning("Received late message (message sequence number is %u, but latest processed message had sequence number %u). Discarding message; session may be desynchronized.", msg->sequence(), this->_latest);
76 return;
77 }
79 // Otherwise, it is safe to insert this message.
80 //Inkscape::GC::anchor(msg);
81 _queue.push_back(msg);
82 /*
83 SP_DT_MSGSTACK(_sm->getDesktop())->flashF(
84 Inkscape::NORMAL_MESSAGE,
85 _("%u changes queued in receive queue."),
86 _queue.size());
87 */
88 //g_log(NULL, G_LOG_LEVEL_DEBUG, "Receive queue size (for %s): %u",
89 // lm_connection_get_jid(this->_sm->session_data->connection), this->_queue.size());
90 }
92 void
93 ReceiveMessageQueue::insertDeferred(MessageNode* msg)
94 {
95 _deferred.push_back(msg);
96 }
98 void
99 ReceiveMessageQueue::setLatestProcessedPacket(unsigned int seq)
100 {
101 _latest = seq;
102 }
105 //###################################
106 //# SEND MESSAGE QUEUE
107 //###################################
108 void
109 SendMessageQueue::insert(MessageNode* msg)
110 {
111 //Inkscape::GC::anchor(msg);
112 _queue.push_back(msg);
113 /*
114 SP_DT_MSGSTACK(_sm->getDesktop())->flashF(
115 Inkscape::NORMAL_MESSAGE,
116 _("%u changes queued in send queue."),
117 _queue.size());
118 */
119 //g_log(NULL, G_LOG_LEVEL_DEBUG, "Send queue size (for %s): %u",
120 // lm_connection_get_jid(this->_sm->session_data->connection),
121 //this->_queue.size());
122 }
124 } // namespace Whiteboard
126 } // namespace Inkscape
129 /*
130 Local Variables:
131 mode:c++
132 c-file-style:"stroustrup"
133 c-file-offsets:((innamespace . 0)(inline-open . 0))
134 indent-tabs-mode:nil
135 fill-column:99
136 End:
137 */
138 // vim: filetype=c++:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :