| Index: chrome/browser/sync/notifier/listener/mediator_thread_impl.h
|
| ===================================================================
|
| --- chrome/browser/sync/notifier/listener/mediator_thread_impl.h (revision 0)
|
| +++ chrome/browser/sync/notifier/listener/mediator_thread_impl.h (revision 0)
|
| @@ -0,0 +1,120 @@
|
| +// Copyright (c) 2009 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +// This object runs on a thread and knows how to interpret messages sent by
|
| +// the talk mediator. The mediator posts messages to a queue which the thread
|
| +// polls (in a super class).
|
| +//
|
| +// Example usage:
|
| +// MediatorThread m = new MediatorThreadImpl(pass in stuff);
|
| +// m.start(); // Start the thread
|
| +// // Once the thread is started, you can do server stuff
|
| +// m.Login(loginInformation);
|
| +// // events happen, the mediator finds out through its pump
|
| +// // more messages are dispatched to the thread
|
| +// // eventually we want to log out
|
| +// m.Logout();
|
| +// delete m; // Also stops the thread
|
| +
|
| +#ifndef CHROME_BROWSER_SYNC_NOTIFIER_LISTENER_MEDIATOR_THREAD_IMPL_H_
|
| +#define CHROME_BROWSER_SYNC_NOTIFIER_LISTENER_MEDIATOR_THREAD_IMPL_H_
|
| +
|
| +#include "base/scoped_ptr.h"
|
| +#include "chrome/browser/sync/notifier/communicator/login.h"
|
| +#include "chrome/browser/sync/notifier/communicator/login_failure.h"
|
| +#include "chrome/browser/sync/notifier/listener/mediator_thread.h"
|
| +#include "talk/base/sigslot.h"
|
| +#include "talk/base/thread.h"
|
| +#include "talk/xmpp/xmppclientsettings.h"
|
| +
|
| +namespace notifier {
|
| +class TaskPump;
|
| +} // namespace notifier
|
| +
|
| +namespace buzz {
|
| +class buzz::XmppClient;
|
| +} // namespace buzz
|
| +
|
| +namespace talk_base {
|
| +class talk_base::SocketServer;
|
| +} // namespace talk_base
|
| +
|
| +namespace browser_sync {
|
| +
|
| +enum MEDIATOR_CMD {
|
| + CMD_LOGIN,
|
| + CMD_DISCONNECT,
|
| + CMD_LISTEN_FOR_UPDATES,
|
| + CMD_SEND_NOTIFICATION,
|
| + CMD_SUBSCRIBE_FOR_UPDATES
|
| +};
|
| +
|
| +// Used to pass authentication information from the mediator to the thread
|
| +// Use new to allocate it on the heap, the thread will delete it for you.
|
| +
|
| +struct LoginData : public talk_base::MessageData {
|
| + explicit LoginData(const buzz::XmppClientSettings& settings)
|
| + : user_settings(settings) {
|
| + }
|
| + virtual ~LoginData() {}
|
| +
|
| + buzz::XmppClientSettings user_settings;
|
| +};
|
| +
|
| +class MediatorThreadImpl
|
| + : public MediatorThread,
|
| + public sigslot::has_slots<>,
|
| + public talk_base::MessageHandler,
|
| + public talk_base::Thread {
|
| + public:
|
| + MediatorThreadImpl();
|
| + virtual ~MediatorThreadImpl();
|
| +
|
| + // Start the thread
|
| + virtual void Start();
|
| + virtual void Run();
|
| +
|
| + // These are called from outside threads, by the talk mediator object.
|
| + // They add messages to a queue which we poll in this thread.
|
| + void Login(const buzz::XmppClientSettings& settings);
|
| + void Logout();
|
| + void ListenForUpdates();
|
| + void SubscribeForUpdates();
|
| + void SendNotification();
|
| + void LogStanzas();
|
| +
|
| + private:
|
| + // Called from within the thread on internal events.
|
| + void ProcessMessages(int cms);
|
| + void OnMessage(talk_base::Message* msg);
|
| + void DoLogin(LoginData* login_data);
|
| + void DoDisconnect();
|
| + void DoSubscribeForUpdates();
|
| + void DoListenForUpdates();
|
| + void DoSendNotification();
|
| + void DoStanzaLogging();
|
| +
|
| + // These handle messages indicating an event happened in the outside world.
|
| + void OnUpdateListenerMessage();
|
| + void OnUpdateNotificationSent(bool success);
|
| + void OnLoginFailureMessage(const notifier::LoginFailure& failure);
|
| + void OnClientStateChangeMessage(notifier::Login::ConnectionState state);
|
| + void OnSubscriptionStateChange(bool success);
|
| + void OnInputDebug(const char* msg, int length);
|
| + void OnOutputDebug(const char* msg, int length);
|
| +
|
| + buzz::XmppClient* xmpp_client();
|
| +
|
| + // All buzz::XmppClients are owned by their parent. The root parent is the
|
| + // SingleLoginTask created by the notifier::Login object. This in turn is
|
| + // owned by the TaskPump. They are destroyed either when processing is
|
| + // complete or the pump shuts down.
|
| + scoped_ptr<notifier::TaskPump> pump_;
|
| + scoped_ptr<notifier::Login> login_;
|
| + DISALLOW_COPY_AND_ASSIGN(MediatorThreadImpl);
|
| +};
|
| +
|
| +} // namespace browser_sync
|
| +
|
| +#endif // CHROME_BROWSER_SYNC_NOTIFIER_LISTENER_MEDIATOR_THREAD_IMPL_H_
|
|
|
| Property changes on: chrome\browser\sync\notifier\listener\mediator_thread_impl.h
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|