summaryrefslogtreecommitdiffstats
path: root/kopete/libkopete/kopetemessagehandlerchain.h
diff options
context:
space:
mode:
Diffstat (limited to 'kopete/libkopete/kopetemessagehandlerchain.h')
-rw-r--r--kopete/libkopete/kopetemessagehandlerchain.h96
1 files changed, 96 insertions, 0 deletions
diff --git a/kopete/libkopete/kopetemessagehandlerchain.h b/kopete/libkopete/kopetemessagehandlerchain.h
new file mode 100644
index 00000000..5852c2da
--- /dev/null
+++ b/kopete/libkopete/kopetemessagehandlerchain.h
@@ -0,0 +1,96 @@
+/*
+ kopetefilterchain.h - Kopete Message Filter Chain
+
+ Copyright (c) 2004 by Richard Smith <kde@metafoo.co.uk>
+ Kopete (c) 2002-2004 by the Kopete developers <kopete-devel@kde.org>
+
+ *************************************************************************
+ * *
+ * This library is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU Lesser General Public *
+ * License as published by the Free Software Foundation; either *
+ * version 2 of the License, or (at your option) any later version. *
+ * *
+ *************************************************************************
+*/
+
+#ifndef KOPETEFILTERCHAIN_H
+#define KOPETEFILTERCHAIN_H
+
+#include <qobject.h>
+#include <kdemacros.h>
+#include <ksharedptr.h>
+#include "kopetemessage.h"
+#include "kopetetask.h"
+
+namespace Kopete
+{
+
+class MessageEvent;
+class MessageHandler;
+class ProcessMessageTask;
+
+/**
+ * @brief A chain of message handlers; the processing layer between protocol and chat view
+ *
+ * This class represents a chain of connected message handlers.
+ *
+ * This class is the client of the chain of responsibility formed by the
+ * MessageHandlers, and acts as a facade for that chain, presenting a
+ * more convenient interface.
+ *
+ * @author Richard Smith <kde@metafoo.co.uk>
+ */
+class MessageHandlerChain : public QObject, private KShared
+{
+ Q_OBJECT
+public:
+ friend class KSharedPtr<MessageHandlerChain>;
+ typedef KSharedPtr<MessageHandlerChain> Ptr;
+
+ /**
+ * Create a new MessageHandlerChain object with the appropriate handlers for
+ * processing messages entering @p manager in direction @p direction.
+ */
+ static Ptr create( ChatSession *manager, Message::MessageDirection direction );
+
+ ProcessMessageTask *processMessage( const Message &message );
+ int capabilities();
+
+private:
+ MessageHandlerChain();
+ ~MessageHandlerChain();
+
+ friend class ProcessMessageTask;
+ class Private;
+ Private *d;
+};
+
+/**
+ * @brief A task for processing a message
+ * @author Richard Smith <kde@metafoo.co.uk>
+ */
+class ProcessMessageTask : public Task
+{
+ Q_OBJECT
+public:
+ MessageEvent *event();
+
+private slots:
+ void slotStart();
+ void slotDone();
+
+private:
+ ProcessMessageTask(MessageHandlerChain::Ptr, MessageEvent *event);
+ ~ProcessMessageTask();
+
+ friend class MessageHandlerChain;
+ class Private;
+ Private *d;
+};
+
+}
+
+#endif
+
+// vim: set noet ts=4 sts=4 sw=4: