Code

replace Util::SharedCStringPtr with the more general Util::shared_ptr<>
[inkscape.git] / src / jabber_whiteboard / message-queue.cpp
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)
103         this->_latest = seq;
106 SendMessageQueue::SendMessageQueue(SessionManager* sm) : MessageQueue(sm)
111 void
112 SendMessageQueue::insert(MessageNode* msg)
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());
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 :