summaryrefslogtreecommitdiffstats
path: root/lib/libUPnP/Neptune/Source/Tests/Messages1/MessagesTest1.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libUPnP/Neptune/Source/Tests/Messages1/MessagesTest1.cpp')
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Messages1/MessagesTest1.cpp407
1 files changed, 407 insertions, 0 deletions
diff --git a/lib/libUPnP/Neptune/Source/Tests/Messages1/MessagesTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/Messages1/MessagesTest1.cpp
new file mode 100644
index 0000000..eb97ea1
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Messages1/MessagesTest1.cpp
@@ -0,0 +1,407 @@
+/*****************************************************************
+|
+| Messages Test Program 1
+|
+| (c) 2001-2008 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdio.h>
+#include "Neptune.h"
+
+/*----------------------------------------------------------------------
+| FooServerMessageHandler
++---------------------------------------------------------------------*/
+class FooServerMessageHandler
+{
+public:
+ NPT_IMPLEMENT_DYNAMIC_CAST(FooServerMessageHandler)
+
+ // destructor
+ virtual ~FooServerMessageHandler() {}
+
+ // methods
+ virtual void OnBarCmd1(NPT_MessageReceiver* /*receiver*/, int /*info*/) {}
+ virtual void OnBarCmd2(NPT_MessageReceiver* /*receiver*/,
+ int /*info1*/, int /*info2*/) { }
+ virtual void OnBarCmd3(NPT_MessageReceiver* /*receiver*/,
+ int /*info1*/, int /*info2*/, int /*info3*/) {}
+};
+NPT_DEFINE_DYNAMIC_CAST_ANCHOR(FooServerMessageHandler)
+
+/*----------------------------------------------------------------------
+| FooServerMessage
++---------------------------------------------------------------------*/
+class FooServerMessage : public NPT_Message
+{
+public:
+ static NPT_Message::Type MessageType;
+ NPT_Message::Type GetType() {
+ return MessageType;
+ }
+ virtual NPT_Result Deliver(FooServerMessageHandler* handler) = 0;
+ virtual NPT_Result Dispatch(NPT_MessageHandler* handler) {
+ FooServerMessageHandler* specific = NPT_DYNAMIC_CAST(FooServerMessageHandler, handler);
+ if (specific) {
+ return Deliver(specific);
+ } else {
+ return DefaultDeliver(handler);
+ }
+ }
+};
+
+NPT_Message::Type FooServerMessage::MessageType = "FooServer Message";
+
+/*----------------------------------------------------------------------
+| FooServerBarCmd1Message
++---------------------------------------------------------------------*/
+class FooServerBarCmd1Message : public FooServerMessage
+{
+public:
+ FooServerBarCmd1Message(NPT_MessageReceiver* receiver, int info) :
+ m_Receiver(receiver), m_Info(info) {}
+ NPT_Result Deliver(FooServerMessageHandler* handler) {
+ handler->OnBarCmd1(m_Receiver, m_Info);
+ return NPT_SUCCESS;
+ }
+
+private:
+ NPT_MessageReceiver* m_Receiver;
+ int m_Info;
+};
+
+/*----------------------------------------------------------------------
+| FooServerBarCmd2Message
++---------------------------------------------------------------------*/
+class FooServerBarCmd2Message : public FooServerMessage
+{
+public:
+ FooServerBarCmd2Message(NPT_MessageReceiver* receiver,
+ int info1, int info2) :
+ m_Receiver(receiver), m_Info1(info1), m_Info2(info2) {}
+ NPT_Result Deliver(FooServerMessageHandler* handler) {
+ handler->OnBarCmd2(m_Receiver, m_Info1, m_Info2);
+ return NPT_SUCCESS;
+ }
+
+private:
+ NPT_MessageReceiver* m_Receiver;
+ int m_Info1;
+ int m_Info2;
+};
+
+/*----------------------------------------------------------------------
+| FooServerBarCmd3Message
++---------------------------------------------------------------------*/
+class FooServerBarCmd3Message : public FooServerMessage
+{
+public:
+ FooServerBarCmd3Message(NPT_MessageReceiver* receiver,
+ int info1, int info2, int info3) :
+ m_Receiver(receiver), m_Info1(info1), m_Info2(info2), m_Info3(info3) {}
+ NPT_Result Deliver(FooServerMessageHandler* handler) {
+ handler->OnBarCmd3(m_Receiver, m_Info1, m_Info2, m_Info3);
+ return NPT_SUCCESS;
+ }
+
+private:
+ NPT_MessageReceiver* m_Receiver;
+ int m_Info1;
+ int m_Info2;
+ int m_Info3;
+};
+
+/*----------------------------------------------------------------------
+| FooServerBarCmd4Message
++---------------------------------------------------------------------*/
+class FooServerBarCmd4Message : public NPT_Message
+{
+public:
+ static NPT_Message::Type MessageType;
+ NPT_Message::Type GetType() {
+ return MessageType;
+ }
+ FooServerBarCmd4Message() {}
+};
+NPT_Message::Type FooServerBarCmd4Message::MessageType = "FooServerBarCmd4 Message";
+
+/*----------------------------------------------------------------------
+| FooClientMessageHandler
++---------------------------------------------------------------------*/
+class FooClientMessageHandler
+{
+public:
+ NPT_IMPLEMENT_DYNAMIC_CAST(FooClientMessageHandler)
+
+ // destructor
+ virtual ~FooClientMessageHandler() {}
+
+ // methods
+ virtual void OnBarNotification1(int /*info*/) {}
+ virtual void OnBarNotification2(int /*info1*/, int /*info2*/) {}
+};
+NPT_DEFINE_DYNAMIC_CAST_ANCHOR(FooClientMessageHandler)
+
+/*----------------------------------------------------------------------
+| FooClientMessage
++---------------------------------------------------------------------*/
+class FooClientMessage : public NPT_Message
+{
+public:
+ static NPT_Message::Type MessageType;
+ NPT_Message::Type GetType() {
+ return MessageType;
+ }
+ virtual NPT_Result Deliver(FooClientMessageHandler* handler) = 0;
+ virtual NPT_Result Dispatch(NPT_MessageHandler* handler) {
+ FooClientMessageHandler* specific = NPT_DYNAMIC_CAST(FooClientMessageHandler, handler);
+ if (specific) {
+ return Deliver(specific);
+ } else {
+ return DefaultDeliver(handler);
+ }
+ }
+};
+NPT_Message::Type FooClientMessage::MessageType = "FooClient Message";
+
+/*----------------------------------------------------------------------
+| FooClientBarNotification1Message
++---------------------------------------------------------------------*/
+class FooClientBarNotification1Message : public FooClientMessage
+{
+public:
+ FooClientBarNotification1Message(int info) : m_Info(info) {}
+ NPT_Result Deliver(FooClientMessageHandler* handler) {
+ handler->OnBarNotification1(m_Info);
+ return NPT_SUCCESS;
+ }
+
+private:
+ int m_Info;
+};
+
+/*----------------------------------------------------------------------
+| FooServer
++---------------------------------------------------------------------*/
+class FooServer : public NPT_Thread,
+ public NPT_MessageReceiver,
+ public NPT_MessageHandler,
+ public FooServerMessageHandler
+{
+public:
+ FooServer();
+
+ // message posting wrappers
+ NPT_Result DoBarCmd1(NPT_MessageReceiver* receiver, int info);
+ NPT_Result DoBarCmd2(NPT_MessageReceiver* receiver, int info1, int info2);
+ NPT_Result DoBarCmd3(NPT_MessageReceiver* receiver,
+ int info1, int info2, int info3);
+ NPT_Result DoBarCmd4();
+
+ // NPT_Runnable methods (from NPT_Thread)
+ void Run();
+
+ // NPT_MessageHandler methods
+ void OnMessage(NPT_Message* message);
+ NPT_Result HandleMessage(NPT_Message* message);
+
+ // NPT_FooServerMessageHandler methods
+ void OnBarCmd1(NPT_MessageReceiver* receiver, int info);
+ void OnBarCmd2(NPT_MessageReceiver* receiver, int info1, int info2);
+
+private:
+ // members
+ NPT_SimpleMessageQueue* m_MessageQueue;
+};
+
+/*----------------------------------------------------------------------
+| FooServer::FooServer
++---------------------------------------------------------------------*/
+FooServer::FooServer()
+{
+ // create the message queue
+ m_MessageQueue = new NPT_SimpleMessageQueue();
+
+ // attach to the message queue
+ SetQueue(m_MessageQueue);
+ SetHandler(this);
+
+ // start the thread
+ Start();
+}
+
+/*----------------------------------------------------------------------
+| FooServer::Run
++---------------------------------------------------------------------*/
+void
+FooServer::Run()
+{
+ printf("FooServer::Run - begin\n");
+ while (m_MessageQueue->PumpMessage() == NPT_SUCCESS) {};
+ printf("FooServer::Run - end\n");
+}
+
+/*----------------------------------------------------------------------
+| FooServer::HandleMessage
++---------------------------------------------------------------------*/
+NPT_Result
+FooServer::HandleMessage(NPT_Message* message)
+{
+ // a handler typically does not implement this method unless it
+ // needs to catch all messages before they are dispatched
+ printf("FooServer::HandleMessage (%s)\n", message->GetType());
+ return NPT_MessageHandler::HandleMessage(message);
+}
+
+/*----------------------------------------------------------------------
+| FooServer::OnMessage
++---------------------------------------------------------------------*/
+void
+FooServer::OnMessage(NPT_Message* message)
+{
+ printf("FooServer::OnMessage (%s)\n", message->GetType());
+}
+
+/*----------------------------------------------------------------------
+| FooServer::OnBarCmd1
++---------------------------------------------------------------------*/
+void
+FooServer::OnBarCmd1(NPT_MessageReceiver* receiver, int info)
+{
+ printf("FooServer::OnBarCmd1 %d\n", info);
+ receiver->PostMessage(new FooClientBarNotification1Message(7));
+}
+
+/*----------------------------------------------------------------------
+| FooServer::OnBarCmd2
++---------------------------------------------------------------------*/
+void
+FooServer::OnBarCmd2(NPT_MessageReceiver* /*receiver*/, int info1, int info2)
+{
+ printf("FooServer::OnBarCmd2 %d %d\n", info1, info2);
+}
+
+/*----------------------------------------------------------------------
+| FooServer::DoBarCmd1
++---------------------------------------------------------------------*/
+NPT_Result
+FooServer::DoBarCmd1(NPT_MessageReceiver* receiver, int info)
+{
+ return PostMessage(new FooServerBarCmd1Message(receiver, info));
+}
+
+/*----------------------------------------------------------------------
+| FooServer::DoBarCmd2
++---------------------------------------------------------------------*/
+NPT_Result
+FooServer::DoBarCmd2(NPT_MessageReceiver* receiver, int info1, int info2)
+{
+ return PostMessage(new FooServerBarCmd2Message(receiver, info1,info2));
+}
+
+/*----------------------------------------------------------------------
+| FooServer::DoBarCmd3
++---------------------------------------------------------------------*/
+NPT_Result
+FooServer::DoBarCmd3(NPT_MessageReceiver* receiver,
+ int info1, int info2, int info3)
+{
+ return PostMessage(new FooServerBarCmd3Message(receiver,
+ info1, info2, info3));
+}
+
+/*----------------------------------------------------------------------
+| FooServer::DoBarCmd4
++---------------------------------------------------------------------*/
+NPT_Result
+FooServer::DoBarCmd4()
+{
+ return PostMessage(new FooServerBarCmd4Message());
+}
+
+/*----------------------------------------------------------------------
+| FooClient
++---------------------------------------------------------------------*/
+class FooClient : public NPT_MessageReceiver,
+ public NPT_MessageHandler,
+ public FooClientMessageHandler
+{
+public:
+ FooClient(FooServer* server, int id);
+
+ // NPT_MessageHandler methods
+ //void OnMessage(NPT_Message* message);
+
+ // NPT_FooServerMessageHandler methods
+ void OnBarNotification1(int info);
+ void OnBarNotification2(int info1, int info2);
+
+private:
+ // members
+ int m_Id;
+};
+
+/*----------------------------------------------------------------------
+| FooClient::FooClient
++---------------------------------------------------------------------*/
+FooClient::FooClient(FooServer* server, int id) :
+ m_Id(id)
+{
+ // set ourself as the message handler
+ SetHandler(this);
+
+ // send commands to server
+ server->DoBarCmd1(this, 1);
+ server->DoBarCmd2(this, 1, 2);
+ server->DoBarCmd3(this, 1, 2, 3);
+ server->DoBarCmd4();
+}
+
+/*----------------------------------------------------------------------
+| FooClient::OnBarNotification1
++---------------------------------------------------------------------*/
+void
+FooClient::OnBarNotification1(int info)
+{
+ printf("FooClient::OnBarNotification1 (client=%d) %d\n", m_Id, info);
+}
+
+/*----------------------------------------------------------------------
+| FooClient::OnBarNotification2
++---------------------------------------------------------------------*/
+void
+FooClient::OnBarNotification2(int info1, int info2)
+{
+ printf("FooClient::OnBarNotification2 (client=%d) %d %d\n", m_Id, info1, info2);
+}
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int /*argc*/, char** /*argv*/)
+{
+ printf("MessagesTest1:: start\n");
+
+ FooServer* server = new FooServer();
+ FooClient* client1 = new FooClient(server, 1);
+ FooClient* client2 = new FooClient(server, 2);
+ NPT_MessageQueue* queue = new NPT_SimpleMessageQueue();
+
+ client1->SetQueue(queue);
+ client2->SetQueue(queue);
+
+ while (queue->PumpMessage() == NPT_SUCCESS) {}
+
+ delete client1;
+ delete client2;
+ delete server;
+ delete queue;
+
+ printf("MessagesTest1:: end\n");
+}
+