Merge pull request #25959 from neo1973/TagLib_deprecation_warnings
[xbmc.git] / lib / libUPnP / Neptune / Source / Core / NptMessaging.cpp
blobcffe1d14d11410a04f451164522f450197bf6aea
1 /*****************************************************************
3 | Neptune - Messaging System
5 | Copyright (c) 2002-2008, Axiomatic Systems, LLC.
6 | All rights reserved.
8 | Redistribution and use in source and binary forms, with or without
9 | modification, are permitted provided that the following conditions are met:
10 | * Redistributions of source code must retain the above copyright
11 | notice, this list of conditions and the following disclaimer.
12 | * Redistributions in binary form must reproduce the above copyright
13 | notice, this list of conditions and the following disclaimer in the
14 | documentation and/or other materials provided with the distribution.
15 | * Neither the name of Axiomatic Systems nor the
16 | names of its contributors may be used to endorse or promote products
17 | derived from this software without specific prior written permission.
19 | THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
20 | EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 | DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
23 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
26 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 ****************************************************************/
32 /*----------------------------------------------------------------------
33 | includes
34 +---------------------------------------------------------------------*/
35 #include "NptMessaging.h"
36 #include "NptDynamicCast.h"
38 /*----------------------------------------------------------------------
39 | globals
40 +---------------------------------------------------------------------*/
41 NPT_DEFINE_DYNAMIC_CAST_ANCHOR(NPT_MessageHandler)
42 const NPT_Message::Type NPT_Message::MessageType = "Generic Message";
44 /*----------------------------------------------------------------------
45 | NPT_MessageHandler::HandleMessage
46 +---------------------------------------------------------------------*/
47 NPT_Result
48 NPT_MessageHandler::HandleMessage(NPT_Message* message)
50 return message->Dispatch(this);
53 /*----------------------------------------------------------------------
54 | NPT_MessageHandlerProxy::NPT_MessageHandlerProxy
55 +---------------------------------------------------------------------*/
56 NPT_DEFINE_DYNAMIC_CAST_ANCHOR(NPT_MessageHandlerProxy)
57 NPT_MessageHandlerProxy::NPT_MessageHandlerProxy(NPT_MessageHandler* handler) :
58 m_Handler(handler),
59 m_ReferenceCount(1)
62 /*----------------------------------------------------------------------
63 | NPT_MessageHandlerProxy::NPT_MessageHandlerProxy
64 +---------------------------------------------------------------------*/
65 NPT_MessageHandlerProxy::~NPT_MessageHandlerProxy()
69 /*----------------------------------------------------------------------
70 | NPT_MessageHandlerProxy::OnMessage
71 +---------------------------------------------------------------------*/
72 void
73 NPT_MessageHandlerProxy::OnMessage(NPT_Message* message)
75 m_Lock.Lock();
76 if (m_Handler) m_Handler->OnMessage(message);
77 m_Lock.Unlock();
80 /*----------------------------------------------------------------------
81 | NPT_MessageHandlerProxy::HandleMessage
82 +---------------------------------------------------------------------*/
83 NPT_Result
84 NPT_MessageHandlerProxy::HandleMessage(NPT_Message* message)
86 NPT_Result result = NPT_SUCCESS;
87 m_Lock.Lock();
88 if (m_Handler) result = m_Handler->HandleMessage(message);
89 m_Lock.Unlock();
91 return result;
94 /*----------------------------------------------------------------------
95 | NPT_MessageHandlerProxy::DetachHandler
96 +---------------------------------------------------------------------*/
97 void
98 NPT_MessageHandlerProxy::DetachHandler()
100 m_Lock.Lock();
101 m_Handler = NULL;
102 m_Lock.Unlock();
105 /*----------------------------------------------------------------------
106 | NPT_MessageHandlerProxy::AddReference
107 +---------------------------------------------------------------------*/
108 void
109 NPT_MessageHandlerProxy::AddReference()
111 m_Lock.Lock();
112 ++m_ReferenceCount;
113 m_Lock.Unlock();
116 /*----------------------------------------------------------------------
117 | NPT_MessageHandlerProxy::Release
118 +---------------------------------------------------------------------*/
119 void
120 NPT_MessageHandlerProxy::Release()
122 m_Lock.Lock();
123 bool must_delete = (--m_ReferenceCount == 0);
124 m_Lock.Unlock();
126 if (must_delete) delete this;