source: nrEngine/src/EventActor.cpp @ 1

Revision 1, 3.8 KB checked in by art, 13 years ago (diff)
RevLine 
[1]1/***************************************************************************
2 *                                                                         *
3 *   (c) Art Tevs, MPI Informatik Saarbruecken                             *
4 *       mailto: <tevs@mpi-sb.mpg.de>                                      *
5 *                                                                         *
6 *   This program is free software; you can redistribute it and/or modify  *
7 *   it under the terms of the GNU General Public License as published by  *
8 *   the Free Software Foundation; either version 2 of the License, or     *
9 *   (at your option) any later version.                                   *
10 *                                                                         *
11 ***************************************************************************/
12
13//----------------------------------------------------------------------------------
14// Includes
15//----------------------------------------------------------------------------------
16#include "EventActor.h"
17#include "EventManager.h"
18#include "EventChannel.h"
19#include "Engine.h"
20
21namespace nrEngine{
22               
23        //------------------------------------------------------------------------
24        EventActor::EventActor(const std::string& name) : mName(name){
25        }
26                       
27        //------------------------------------------------------------------------
28        EventActor::~EventActor()
29        {
30                // first let each channel know, that we want to disconnect now
31                std::list<std::string>::iterator it = mChannel.begin();
32                for (; it != mChannel.end(); it++){
33                        Engine::sEventManager()->getChannel(*it)->del(this, false);
34                }
35
36        }
37
38        //------------------------------------------------------------------------
39        const std::string& EventActor::getName() const
40        {
41                return mName;
42        }
43
44        //------------------------------------------------------------------------
45        /*void EventActor::OnEvent(const EventChannel& channel, SharedPtr<Event> event)
46        {
47                // we call the pure virtual derived function which has to be
48                // overloaded for different event types.
49                _OnEvent(channel, event);
50        }*/
51       
52        //------------------------------------------------------------------------
53        Result EventActor::connect (const std::string& name)
54        {
55                // get a channel
56                SharedPtr<EventChannel> channel = Engine::sEventManager()->getChannel(name);
57                if (!channel) return EVENT_NO_CHANNEL_FOUND;
58
59                // check if we are already connected
60                if (isConnected(name)) return EVENT_ALREADY_CONNECTED;
61               
62                // ask the channel to connect me to it
63                channel->add(this);
64                               
65                // ok
66                return OK;
67        }
68       
69        //------------------------------------------------------------------------
70        Result EventActor::disconnect (const std::string& name)
71        {
72                // get a channel
73                SharedPtr<EventChannel> channel = Engine::sEventManager()->getChannel(name);
74                if (!channel) return EVENT_NO_CHANNEL_FOUND;
75               
76                // check if we are already connected
77                if (!isConnected(name)) return EVENT_NOT_CONNECTED;
78               
79                // ask the channel to connect me to it
80                channel->del(this);
81
82                // ok
83                return OK;
84        }
85
86        //------------------------------------------------------------------------
87        bool EventActor::isConnected(const std::string& name)
88        {
89                // search for the name in the list
90                return std::find(mChannel.begin(), mChannel.end(), name) != mChannel.end();
91        }
92
93        //------------------------------------------------------------------------
94        void EventActor::_noticeConnected(EventChannel* channel)
95        {
96                // add the name of this channel to the list
97                if (!isConnected(channel->getName()))
98                        mChannel.push_back(channel->getName());
99        }
100
101       
102        //------------------------------------------------------------------------
103        void EventActor::_noticeDisconnected(EventChannel* channel)
104        {
105                // delete the name of this channel in the connection list
106                if (isConnected(channel->getName()))
107                        mChannel.erase(std::find(mChannel.begin(), mChannel.end(), channel->getName()));
108        }
109       
110}; // end namespace     
111
Note: See TracBrowser for help on using the repository browser.