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 MessageQueue::MessageQueue(SessionManager* sm) : _sm(sm)
26 {
28 }
30 MessageQueue::~MessageQueue()
31 {
33 }
35 MessageNode*
36 MessageQueue::first()
37 {
38 return this->_queue.front();
39 }
41 void
42 MessageQueue::popFront()
43 {
44 this->_queue.pop_front();
45 // g_log(NULL, G_LOG_LEVEL_DEBUG, "Removed element, queue size (for %s): %u", lm_connection_get_jid(this->_sm->session_data->connection), this->_queue.size());
46 }
48 unsigned int
49 MessageQueue::size()
50 {
51 return this->_queue.size();
52 }
54 bool
55 MessageQueue::empty()
56 {
57 return this->_queue.empty();
58 }
60 void
61 MessageQueue::clear()
62 {
63 this->_queue.clear();
64 }
66 ReceiveMessageQueue::ReceiveMessageQueue(SessionManager* sm) : MessageQueue(sm), _latest(0)
67 {
69 }
71 void
72 ReceiveMessageQueue::insert(MessageNode* msg)
73 {
74 // Check to see if the incoming message has a sequence number
75 // lower than the sequence number of the latest message processed
76 // by this message's sender. If it does, drop the message and produce
77 // a warning.
78 if (msg->sequence() < this->_latest) {
79 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);
80 return;
81 }
83 // Otherwise, it is safe to insert this message.
84 // Inkscape::GC::anchor(msg);
85 this->_queue.push_back(msg);
86 SP_DT_MSGSTACK(this->_sm->desktop())->flashF(Inkscape::NORMAL_MESSAGE,
87 ngettext("%u change in receive queue.",
88 "%u changes in receive queue.",
89 this->_queue.size()),
90 this->_queue.size());
91 // g_log(NULL, G_LOG_LEVEL_DEBUG, "Receive queue size (for %s): %u", lm_connection_get_jid(this->_sm->session_data->connection), this->_queue.size());
92 }
94 void
95 ReceiveMessageQueue::insertDeferred(MessageNode* msg)
96 {
97 this->_deferred.push_back(msg);
98 }
100 void
101 ReceiveMessageQueue::setLatestProcessedPacket(unsigned int seq)
102 {
103 this->_latest = seq;
104 }
106 SendMessageQueue::SendMessageQueue(SessionManager* sm) : MessageQueue(sm)
107 {
109 }
111 void
112 SendMessageQueue::insert(MessageNode* msg)
113 {
114 // Inkscape::GC::anchor(msg);
115 this->_queue.push_back(msg);
116 SP_DT_MSGSTACK(this->_sm->desktop())->flashF(Inkscape::NORMAL_MESSAGE,
117 ngettext("%u change in send queue.",
118 "%u changes in send queue.",
119 this->_queue.size()),
120 this->_queue.size());
121 // g_log(NULL, G_LOG_LEVEL_DEBUG, "Send queue size (for %s): %u", lm_connection_get_jid(this->_sm->session_data->connection), this->_queue.size());
122 }
124 }
126 }
129 /*
130 Local Variables:
131 mode:c++
132 c-file-style:"stroustrup"
133 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
134 indent-tabs-mode:nil
135 fill-column:99
136 End:
137 */
138 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :