#ifndef SERVER_H
#define SERVER_H
-#include <boost/signals2/trackable.hpp>
-
+#include <memory>
+#include <string>
#include <vector>
#ifdef _WIN32
class Server;
-/** This class managed the pipes used for communicating with clients.
+/// A small utility to track the lifetime of an object.
+class Trackable {
+public:
+ Trackable() : p_(std::make_shared<int>(0)) {}
+ Trackable(Trackable const &) : Trackable() {}
+ Trackable(Trackable &&) : Trackable() {}
+ Trackable & operator=(Trackable const &) { return *this; }
+ Trackable & operator=(Trackable &&) { return *this; }
+ // This weak pointer lets you know if the parent object has been destroyed
+ std::weak_ptr<void> p() const { return p_; }
+private:
+ std::shared_ptr<void> const p_;
+};
+
+
+/** This class manages the pipes used for communicating with clients.
Usage: Initialize with pipe-filename-base, client class to receive
messages, and callback-function that will be called with the messages.
When you want to send, use "send()".
a clean string interface.
*/
#ifndef _WIN32
-class LyXComm : public boost::signals2::trackable {
+class LyXComm {
#else
class LyXComm : public QObject {
Q_OBJECT
#endif
/// Tell whether we asked another instance of LyX to open the files
- bool deferredLoading() { return deferred_loading_; }
+ bool deferredLoading() const { return deferred_loading_; }
private:
/// the filename of the in pipe
void closeConnection();
/// Load files in another running instance of LyX
- bool loadFilesInOtherInstance();
+ bool loadFilesInOtherInstance() const;
#ifndef _WIN32
/// start a pipe
/// Did we defer loading of files to another instance?
bool deferred_loading_;
+
+ /// Track object's liveness
+ Trackable tracker_;
};
// lyxserver is using a buffer that is being edited with a bufferview.
// With a common buffer list this is not a problem, maybe. (Alejandro)
///
- Server(std::string const & pip);
+ Server(std::string const & pipes);
///
~Server();
///
void notifyClient(std::string const &);
///
- bool deferredLoadingToOtherInstance() { return pipes_.deferredLoading(); }
+ bool deferredLoadingToOtherInstance() const { return pipes_.deferredLoading(); }
/// whilst crashing etc.
void emergencyCleanup() { pipes_.emergencyCleanup(); }