| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 | 116 |
| 117 template<class T> | 117 template<class T> |
| 118 class DisposeData : public MessageData { | 118 class DisposeData : public MessageData { |
| 119 public: | 119 public: |
| 120 explicit DisposeData(T* data) : data_(data) { } | 120 explicit DisposeData(T* data) : data_(data) { } |
| 121 virtual ~DisposeData() { delete data_; } | 121 virtual ~DisposeData() { delete data_; } |
| 122 private: | 122 private: |
| 123 T* data_; | 123 T* data_; |
| 124 }; | 124 }; |
| 125 | 125 |
| 126 const uint32 MQID_ANY = static_cast<uint32>(-1); | 126 const uint32_t MQID_ANY = static_cast<uint32_t>(-1); |
| 127 const uint32 MQID_DISPOSE = static_cast<uint32>(-2); | 127 const uint32_t MQID_DISPOSE = static_cast<uint32_t>(-2); |
| 128 | 128 |
| 129 // No destructor | 129 // No destructor |
| 130 | 130 |
| 131 struct Message { | 131 struct Message { |
| 132 Message() { | 132 Message() { |
| 133 memset(this, 0, sizeof(*this)); | 133 memset(this, 0, sizeof(*this)); |
| 134 } | 134 } |
| 135 inline bool Match(MessageHandler* handler, uint32 id) const { | 135 inline bool Match(MessageHandler* handler, uint32_t id) const { |
| 136 return (handler == NULL || handler == phandler) | 136 return (handler == NULL || handler == phandler) |
| 137 && (id == MQID_ANY || id == message_id); | 137 && (id == MQID_ANY || id == message_id); |
| 138 } | 138 } |
| 139 MessageHandler *phandler; | 139 MessageHandler *phandler; |
| 140 uint32 message_id; | 140 uint32_t message_id; |
| 141 MessageData *pdata; | 141 MessageData *pdata; |
| 142 uint32 ts_sensitive; | 142 uint32_t ts_sensitive; |
| 143 }; | 143 }; |
| 144 | 144 |
| 145 typedef std::list<Message> MessageList; | 145 typedef std::list<Message> MessageList; |
| 146 | 146 |
| 147 // DelayedMessage goes into a priority queue, sorted by trigger time. Messages | 147 // DelayedMessage goes into a priority queue, sorted by trigger time. Messages |
| 148 // with the same trigger time are processed in num_ (FIFO) order. | 148 // with the same trigger time are processed in num_ (FIFO) order. |
| 149 | 149 |
| 150 class DelayedMessage { | 150 class DelayedMessage { |
| 151 public: | 151 public: |
| 152 DelayedMessage(int delay, uint32 trigger, uint32 num, const Message& msg) | 152 DelayedMessage(int delay, uint32_t trigger, uint32_t num, const Message& msg) |
| 153 : cmsDelay_(delay), msTrigger_(trigger), num_(num), msg_(msg) { } | 153 : cmsDelay_(delay), msTrigger_(trigger), num_(num), msg_(msg) {} |
| 154 | 154 |
| 155 bool operator< (const DelayedMessage& dmsg) const { | 155 bool operator< (const DelayedMessage& dmsg) const { |
| 156 return (dmsg.msTrigger_ < msTrigger_) | 156 return (dmsg.msTrigger_ < msTrigger_) |
| 157 || ((dmsg.msTrigger_ == msTrigger_) && (dmsg.num_ < num_)); | 157 || ((dmsg.msTrigger_ == msTrigger_) && (dmsg.num_ < num_)); |
| 158 } | 158 } |
| 159 | 159 |
| 160 int cmsDelay_; // for debugging | 160 int cmsDelay_; // for debugging |
| 161 uint32 msTrigger_; | 161 uint32_t msTrigger_; |
| 162 uint32 num_; | 162 uint32_t num_; |
| 163 Message msg_; | 163 Message msg_; |
| 164 }; | 164 }; |
| 165 | 165 |
| 166 class MessageQueue { | 166 class MessageQueue { |
| 167 public: | 167 public: |
| 168 static const int kForever = -1; | 168 static const int kForever = -1; |
| 169 | 169 |
| 170 explicit MessageQueue(SocketServer* ss = NULL); | 170 explicit MessageQueue(SocketServer* ss = NULL); |
| 171 virtual ~MessageQueue(); | 171 virtual ~MessageQueue(); |
| 172 | 172 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 183 virtual bool IsQuitting(); | 183 virtual bool IsQuitting(); |
| 184 virtual void Restart(); | 184 virtual void Restart(); |
| 185 | 185 |
| 186 // Get() will process I/O until: | 186 // Get() will process I/O until: |
| 187 // 1) A message is available (returns true) | 187 // 1) A message is available (returns true) |
| 188 // 2) cmsWait seconds have elapsed (returns false) | 188 // 2) cmsWait seconds have elapsed (returns false) |
| 189 // 3) Stop() is called (returns false) | 189 // 3) Stop() is called (returns false) |
| 190 virtual bool Get(Message *pmsg, int cmsWait = kForever, | 190 virtual bool Get(Message *pmsg, int cmsWait = kForever, |
| 191 bool process_io = true); | 191 bool process_io = true); |
| 192 virtual bool Peek(Message *pmsg, int cmsWait = 0); | 192 virtual bool Peek(Message *pmsg, int cmsWait = 0); |
| 193 virtual void Post(MessageHandler *phandler, uint32 id = 0, | 193 virtual void Post(MessageHandler* phandler, |
| 194 MessageData *pdata = NULL, bool time_sensitive = false); | 194 uint32_t id = 0, |
| 195 MessageData* pdata = NULL, |
| 196 bool time_sensitive = false); |
| 195 virtual void PostDelayed(int cmsDelay, | 197 virtual void PostDelayed(int cmsDelay, |
| 196 MessageHandler* phandler, | 198 MessageHandler* phandler, |
| 197 uint32 id = 0, | 199 uint32_t id = 0, |
| 198 MessageData* pdata = NULL); | 200 MessageData* pdata = NULL); |
| 199 virtual void PostAt(uint32 tstamp, | 201 virtual void PostAt(uint32_t tstamp, |
| 200 MessageHandler* phandler, | 202 MessageHandler* phandler, |
| 201 uint32 id = 0, | 203 uint32_t id = 0, |
| 202 MessageData* pdata = NULL); | 204 MessageData* pdata = NULL); |
| 203 virtual void Clear(MessageHandler *phandler, uint32 id = MQID_ANY, | 205 virtual void Clear(MessageHandler* phandler, |
| 206 uint32_t id = MQID_ANY, |
| 204 MessageList* removed = NULL); | 207 MessageList* removed = NULL); |
| 205 virtual void Dispatch(Message *pmsg); | 208 virtual void Dispatch(Message *pmsg); |
| 206 virtual void ReceiveSends(); | 209 virtual void ReceiveSends(); |
| 207 | 210 |
| 208 // Amount of time until the next message can be retrieved | 211 // Amount of time until the next message can be retrieved |
| 209 virtual int GetDelay(); | 212 virtual int GetDelay(); |
| 210 | 213 |
| 211 bool empty() const { return size() == 0u; } | 214 bool empty() const { return size() == 0u; } |
| 212 size_t size() const { | 215 size_t size() const { |
| 213 CritScope cs(&crit_); // msgq_.size() is not thread safe. | 216 CritScope cs(&crit_); // msgq_.size() is not thread safe. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 225 // no longer be used. | 228 // no longer be used. |
| 226 sigslot::signal0<> SignalQueueDestroyed; | 229 sigslot::signal0<> SignalQueueDestroyed; |
| 227 | 230 |
| 228 protected: | 231 protected: |
| 229 class PriorityQueue : public std::priority_queue<DelayedMessage> { | 232 class PriorityQueue : public std::priority_queue<DelayedMessage> { |
| 230 public: | 233 public: |
| 231 container_type& container() { return c; } | 234 container_type& container() { return c; } |
| 232 void reheap() { make_heap(c.begin(), c.end(), comp); } | 235 void reheap() { make_heap(c.begin(), c.end(), comp); } |
| 233 }; | 236 }; |
| 234 | 237 |
| 235 void DoDelayPost(int cmsDelay, uint32 tstamp, MessageHandler *phandler, | 238 void DoDelayPost(int cmsDelay, |
| 236 uint32 id, MessageData* pdata); | 239 uint32_t tstamp, |
| 240 MessageHandler* phandler, |
| 241 uint32_t id, |
| 242 MessageData* pdata); |
| 237 | 243 |
| 238 // The SocketServer is not owned by MessageQueue. | 244 // The SocketServer is not owned by MessageQueue. |
| 239 SocketServer* ss_; | 245 SocketServer* ss_; |
| 240 // If a server isn't supplied in the constructor, use this one. | 246 // If a server isn't supplied in the constructor, use this one. |
| 241 scoped_ptr<SocketServer> default_ss_; | 247 scoped_ptr<SocketServer> default_ss_; |
| 242 bool fStop_; | 248 bool fStop_; |
| 243 bool fPeekKeep_; | 249 bool fPeekKeep_; |
| 244 Message msgPeek_; | 250 Message msgPeek_; |
| 245 MessageList msgq_; | 251 MessageList msgq_; |
| 246 PriorityQueue dmsgq_; | 252 PriorityQueue dmsgq_; |
| 247 uint32 dmsgq_next_num_; | 253 uint32_t dmsgq_next_num_; |
| 248 mutable CriticalSection crit_; | 254 mutable CriticalSection crit_; |
| 249 | 255 |
| 250 private: | 256 private: |
| 251 RTC_DISALLOW_COPY_AND_ASSIGN(MessageQueue); | 257 RTC_DISALLOW_COPY_AND_ASSIGN(MessageQueue); |
| 252 }; | 258 }; |
| 253 | 259 |
| 254 } // namespace rtc | 260 } // namespace rtc |
| 255 | 261 |
| 256 #endif // WEBRTC_BASE_MESSAGEQUEUE_H_ | 262 #endif // WEBRTC_BASE_MESSAGEQUEUE_H_ |
| OLD | NEW |