Index: third_party/libjingle/overrides/talk/base/messagequeue.cc |
=================================================================== |
--- third_party/libjingle/overrides/talk/base/messagequeue.cc (revision 124023) |
+++ third_party/libjingle/overrides/talk/base/messagequeue.cc (working copy) |
@@ -34,6 +34,7 @@ |
#endif |
#include "talk/base/common.h" |
+#include "talk/base/event.h" |
#include "talk/base/logging.h" |
#include "talk/base/messagequeue.h" |
#include "talk/base/physicalsocketserver.h" |
@@ -44,6 +45,34 @@ |
const uint32 kMaxMsgLatency = 150; // 150 ms |
//------------------------------------------------------------------ |
+// NullSocketServer |
+ |
+class NullSocketServer : public SocketServer { |
Sergey Ulanov
2012/02/28 21:54:02
should this be in an anonymous namespace?
Ronghua Wu (Left Chromium)
2012/02/28 23:16:57
Done.
|
+ public: |
+ NullSocketServer() : event_(false, false) { } |
+ |
+ virtual bool Wait(int cms, bool process_io) { |
+ return event_.Wait(kForever); |
+ } |
+ |
+ virtual void WakeUp() { |
+ event_.Set(); |
+ } |
+ |
+ virtual Socket* CreateSocket(int type) { |
+ return NULL; |
+ } |
+ |
+ // Returns a new socket for nonblocking communication. The type can be |
+ // SOCK_DGRAM and/or SOCK_STREAM. |
+ virtual AsyncSocket* CreateAsyncSocket(int type) { |
+ return NULL; |
+ } |
+ private: |
Sergey Ulanov
2012/02/28 21:54:02
nit: empty line before this one.
Ronghua Wu (Left Chromium)
2012/02/28 23:16:57
Done.
|
+ Event event_; |
+}; |
+ |
+//------------------------------------------------------------------ |
// MessageQueueManager |
MessageQueueManager* MessageQueueManager::instance_; |
@@ -105,18 +134,30 @@ |
//------------------------------------------------------------------ |
// MessageQueue |
-MessageQueue::MessageQueue(SocketServer* ss) |
- : ss_(ss), fStop_(false), fPeekKeep_(false), active_(false), |
- dmsgq_next_num_(0) { |
- if (!ss_) { |
- // Currently, MessageQueue holds a socket server, and is the base class for |
- // Thread. It seems like it makes more sense for Thread to hold the socket |
- // server, and provide it to the MessageQueue, since the Thread controls |
- // the I/O model, and MQ is agnostic to those details. Anyway, this causes |
- // messagequeue_unittest to depend on network libraries... yuck. |
- default_ss_.reset(new PhysicalSocketServer()); |
- ss_ = default_ss_.get(); |
+MessageQueue::MessageQueue() { |
+ // TODO(ronghuawu): |
+ // Currently, MessageQueue holds a socket server, and is the base class for |
+ // Thread. It seems like it makes more sense for Thread to hold the socket |
+ // server, and provide it to the MessageQueue, since the Thread controls |
+ // the I/O model, and MQ is agnostic to those details. Anyway, this causes |
+ // messagequeue_unittest to depend on network libraries... yuck. |
+ default_ss_.reset(new PhysicalSocketServer()); |
+ Construct(); |
+} |
+ |
+MessageQueue::MessageQueue(SocketServer* ss) { |
+ if (!ss) { |
+ default_ss_.reset(new NullSocketServer()); |
Sergey Ulanov
2012/02/28 21:54:02
here we lose |ss| if it is set.
Ronghua Wu (Left Chromium)
2012/02/28 23:16:57
Done.
|
} |
+ Construct(); |
+} |
+ |
+void MessageQueue::Construct() { |
+ fStop_ = false; |
+ fPeekKeep_ = false; |
+ active_ = false; |
+ dmsgq_next_num_ = 0; |
+ ss_ = default_ss_.get(); |
ss_->SetMessageQueue(this); |
} |