2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 * @file event_delivery_server.h
18 * @author Jaroslaw Osmanski j.osmanski@samsung.com
20 * @brief This file is the implementation file of simple event delivery test
22 #include <dpl/application.h>
23 #include <dpl/controller.h>
24 #include <dpl/event_delivery.h>
25 #include <dpl/event_delivery_injector.h>
26 #include <dpl/generic_event.h>
27 #include <dpl/type_list.h>
32 EVENT_DELIVERY_DECLARE_EVENT_MESSAGE_0(EmptyMessage)
33 EVENT_DELIVERY_DECLARE_EVENT_MESSAGE_2(HelloWorldMessage, std::string, std::string)
34 EVENT_DELIVERY_DECLARE_EVENT_MESSAGE_2(NumberMessage, int, float)
35 EVENT_DELIVERY_DECLARE_EVENT_MESSAGE_4(TestMessage, int, int, int, int)
37 EVENT_DELIVERY_IMPLEMENT_EVENT_MESSAGE(EmptyMessage)
38 EVENT_DELIVERY_IMPLEMENT_EVENT_MESSAGE(HelloWorldMessage)
39 EVENT_DELIVERY_IMPLEMENT_EVENT_MESSAGE(NumberMessage)
40 EVENT_DELIVERY_IMPLEMENT_EVENT_MESSAGE(TestMessage)
41 } // namespace TestEvents
43 DECLARE_GENERIC_EVENT_0(StartEvent)
44 DECLARE_GENERIC_EVENT_0(CloseEvent)
45 DECLARE_GENERIC_EVENT_0(DeleteEvent)
48 public DPL::Application,
49 private DPL::Controller<DPL::TypeListDecl<DeleteEvent, CloseEvent>::Type>,
50 public DPL::EventListener<TestEvents::HelloWorldMessage>,
51 public DPL::EventListener<TestEvents::NumberMessage>
54 class OneTimeListener :
55 public DPL::EventListener<TestEvents::EmptyMessage>
60 DPL::EventDeliverySystem::AddListener<TestEvents::EmptyMessage > (this);
65 LogError("Deleting OneTimeListener");
66 DPL::EventDeliverySystem::RemoveListener<TestEvents::EmptyMessage > (this);
70 void OnEventReceived(const TestEvents::EmptyMessage &message)
73 std::cout << "OneTimeListener empty message";
78 OneTimeListener * oneTimeListener;
80 virtual void OnEventReceived(const CloseEvent &event)
86 virtual void OnEventReceived(const DeleteEvent &event)
89 delete oneTimeListener;
90 oneTimeListener = NULL;
95 void OnEventReceived(const TestEvents::HelloWorldMessage &message)
97 std::cout << "Got HelloWorldMessage: " << message.GetArg0() << " : " << message.GetArg1() << std::endl;
99 if (oneTimeListener != NULL)
101 DPL::ControllerEventHandler<DeleteEvent>::PostTimedEvent(DeleteEvent(), 1);
105 void OnEventReceived(const TestEvents::NumberMessage &message)
107 std::cout << "Got NumberMessage: " << message.GetArg0() << ", " << message.GetArg1() << std::endl;
112 MyListener(int argc, char **argv)
113 : Application(argc, argv, "Listener")
117 DPL::EventDeliverySystem::AddListener<TestEvents::HelloWorldMessage>(this);
118 DPL::EventDeliverySystem::AddListener<TestEvents::NumberMessage>(this);
120 DPL::ControllerEventHandler<CloseEvent>::PostTimedEvent(CloseEvent(), 8);
121 oneTimeListener = new OneTimeListener();
124 virtual ~MyListener()
126 DPL::EventDeliverySystem::RemoveListener<TestEvents::HelloWorldMessage > (this);
127 DPL::EventDeliverySystem::RemoveListener<TestEvents::NumberMessage > (this);
128 delete oneTimeListener;
133 public DPL::Application,
134 private DPL::Controller<DPL::TypeListDecl<StartEvent, CloseEvent>::Type>
137 virtual void OnEventReceived(const CloseEvent &event)
143 virtual void OnEventReceived(const StartEvent &event)
146 std::cout << "Publishing HelloWorldMessage..." << std::endl;
147 TestEvents::HelloWorldMessage hello("Hello cruel world !", "AAA BBB CCC");
148 DPL::EventDeliverySystem::Publish(hello);
149 std::cout << "HelloWorldMessage published." << std::endl;
151 std::cout << "Publishing NumberMessage message..." << std::endl;
152 TestEvents::NumberMessage number(13, 3.14f);
153 DPL::EventDeliverySystem::Publish(number);
154 std::cout << "NumberMessage published." << std::endl;
156 std::cout << "Publishing EmptyMessage..." << std::endl;
157 TestEvents::EmptyMessage empty;
158 DPL::EventDeliverySystem::Publish(empty);
159 std::cout << "EmptyMessage published." << std::endl;
163 MyPusher(int argc, char **argv)
164 : Application(argc, argv, "Pusher")
168 DPL::ControllerEventHandler<StartEvent>::PostTimedEvent(StartEvent(), 2);
169 DPL::ControllerEventHandler<StartEvent>::PostTimedEvent(StartEvent(), 6);
170 DPL::ControllerEventHandler<CloseEvent>::PostTimedEvent(CloseEvent(), 8);
178 int main(int argc, char* argv[])
184 MyPusher myPusher(argc, argv);
190 printf("fork() failed!");
195 MyListener myListener(argc, argv);