Update libjingle to 61168196
R=mallinath@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/8139004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@5502 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/talk/base/messagehandler.h b/talk/base/messagehandler.h
index 913edf8..8b9e5f6 100644
--- a/talk/base/messagehandler.h
+++ b/talk/base/messagehandler.h
@@ -28,6 +28,7 @@
#ifndef TALK_BASE_MESSAGEHANDLER_H_
#define TALK_BASE_MESSAGEHANDLER_H_
+#include "talk/base/callback.h"
#include "talk/base/constructormagic.h"
namespace talk_base {
@@ -38,16 +39,52 @@
class MessageHandler {
public:
+ virtual ~MessageHandler();
virtual void OnMessage(Message* msg) = 0;
protected:
MessageHandler() {}
- virtual ~MessageHandler();
private:
DISALLOW_COPY_AND_ASSIGN(MessageHandler);
};
+// Helper class to facilitate executing a functor on a thread.
+template <class ReturnT, class FunctorT>
+class FunctorMessageHandler : public MessageHandler {
+ public:
+ explicit FunctorMessageHandler(const FunctorT& functor)
+ : functor_(functor) {}
+ virtual void OnMessage(Message* msg) {
+ result_ = functor_();
+ if (!callback_.empty()) callback_();
+ }
+ const ReturnT& result() const { return result_; }
+ void SetCallback(const Callback0<void>& callback) { callback_ = callback; }
+ private:
+ FunctorT functor_;
+ ReturnT result_;
+ Callback0<void> callback_;
+};
+
+// Specialization for ReturnT of void.
+template <class FunctorT>
+class FunctorMessageHandler<void, FunctorT> : public MessageHandler {
+ public:
+ explicit FunctorMessageHandler(const FunctorT& functor)
+ : functor_(functor) {}
+ virtual void OnMessage(Message* msg) {
+ functor_();
+ if (!callback_.empty()) callback_();
+ }
+ void result() const {}
+ void SetCallback(const Callback0<void>& callback) { callback_ = callback; }
+ private:
+ FunctorT functor_;
+ Callback0<void> callback_;
+};
+
+
} // namespace talk_base
#endif // TALK_BASE_MESSAGEHANDLER_H_