void RotaryEncoderEventDispatcher::event__countChanged(const void* pSender, const Poco::Int32& data)
{
	if (pSender)
	{
		Poco::Clock now;
		Poco::FastMutex::ScopedLock lock(_mutex);
		SubscriberMap::iterator it = _subscribers.begin();
		while (it != _subscribers.end())
		{
			if (it->second->expireTime != 0 && it->second->expireTime < now)
			{
				SubscriberMap::iterator itDel(it++);
				_subscribers.erase(itDel);
			}
			else
			{
				try
				{
					event__countChangedImpl(it->first, data);
				}
				catch (Poco::RemotingNG::RemoteException&)
				{
					throw;
				}
				catch (Poco::Exception&)
				{
				}
				++it;
			}
		}
	}
}
void PeripheralEventDispatcher::event__disconnected(const void* pSender)
{
	if (pSender)
	{
		Poco::Clock now;
		Poco::FastMutex::ScopedLock lock(_mutex);
		SubscriberMap::iterator it = _subscribers.begin();
		while (it != _subscribers.end())
		{
			if (it->second->expireTime != 0 && it->second->expireTime < now)
			{
				SubscriberMap::iterator itDel(it++);
				_subscribers.erase(itDel);
			}
			else
			{
				try
				{
					event__disconnectedImpl(it->first);
				}
				catch (Poco::RemotingNG::RemoteException&)
				{
					throw;
				}
				catch (Poco::Exception&)
				{
				}
				++it;
			}
		}
	}
}
void MQTTClientEventDispatcher::event__messageArrived(const void* pSender, const IoT::MQTT::MessageArrivedEvent& data)
{
    if (pSender)
    {
        Poco::Timestamp now;
        Poco::FastMutex::ScopedLock lock(_mutex);
        SubscriberMap::iterator it = _subscribers.begin();
        while (it != _subscribers.end())
        {
            if (it->second->expireTime != 0 && it->second->expireTime < now)
            {
                SubscriberMap::iterator itDel(it++);
                _subscribers.erase(itDel);
            }
            else
            {
                try
                {
                    event__messageArrivedImpl(it->first, data);
                }
                catch (Poco::RemotingNG::RemoteException&)
                {
                    throw;
                }
                catch (Poco::Exception&)
                {
                }
                ++it;
            }
        }
    }
}
void DeviceStatusServiceEventDispatcher::event__statusUpdated(const void* pSender, const IoT::DeviceStatus::DeviceStatusChange& data)
{
	if (pSender)
	{
		Poco::Clock now;
		Poco::FastMutex::ScopedLock lock(_mutex);
		SubscriberMap::iterator it = _subscribers.begin();
		while (it != _subscribers.end())
		{
			if (it->second->expireTime != 0 && it->second->expireTime < now)
			{
				SubscriberMap::iterator itDel(it++);
				_subscribers.erase(itDel);
			}
			else
			{
				try
				{
					event__statusUpdatedImpl(it->first, data);
				}
				catch (Poco::RemotingNG::RemoteException&)
				{
					throw;
				}
				catch (Poco::Exception&)
				{
				}
				++it;
			}
		}
	}
}
void AccelerometerEventDispatcher::event__accelerationUpdate(const void* pSender, const IoT::Devices::Acceleration& data)
{
	if (pSender)
	{
		Poco::Timestamp now;
		Poco::FastMutex::ScopedLock lock(_mutex);
		SubscriberMap::iterator it = _subscribers.begin();
		while (it != _subscribers.end())
		{
			if (it->second->expireTime != 0 && it->second->expireTime < now)
			{
				SubscriberMap::iterator itDel(it++);
				_subscribers.erase(itDel);
			}
			else
			{
				try
				{
					event__accelerationUpdateImpl(it->first, data);
				}
				catch (Poco::RemotingNG::RemoteException&)
				{
					throw;
				}
				catch (Poco::Exception&)
				{
				}
				++it;
			}
		}
	}
}