2017-08-23 23:51:34 +02:00
|
|
|
/*
|
2017-08-18 20:19:13 +02:00
|
|
|
* charybdis: 21st Century IRC++d
|
|
|
|
*
|
|
|
|
* Copyright (C) 2016 Charybdis Development Team
|
|
|
|
* Copyright (C) 2016 Jason Volk <jason@zemos.net>
|
2017-08-23 23:10:28 +02:00
|
|
|
*
|
|
|
|
* Permission to use, copy, modify, and/or distribute this software for any
|
|
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
|
|
* copyright notice and this permission notice is present in all copies.
|
|
|
|
*
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
|
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
|
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
|
|
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
|
|
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
|
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
|
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
|
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
|
|
|
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
2017-08-18 20:19:13 +02:00
|
|
|
*
|
2017-08-23 23:10:28 +02:00
|
|
|
*/
|
|
|
|
|
2017-08-18 20:19:13 +02:00
|
|
|
#pragma once
|
2017-09-08 11:32:49 +02:00
|
|
|
#define HAVE_IRCD_M_EVENTS_H
|
2017-08-23 23:10:28 +02:00
|
|
|
|
2017-09-08 11:32:49 +02:00
|
|
|
namespace ircd::m::events
|
|
|
|
{
|
|
|
|
IRCD_M_EXCEPTION(m::error, INVALID_TRANSITION, http::BAD_REQUEST)
|
|
|
|
|
|
|
|
struct transition;
|
|
|
|
|
|
|
|
using transition_list = std::list<struct transition *>;
|
|
|
|
extern transition_list transitions;
|
|
|
|
|
|
|
|
extern database *events;
|
|
|
|
using cursor = db::cursor<events, m::event>;
|
|
|
|
using const_iterator = cursor::const_iterator;
|
|
|
|
using iterator = const_iterator;
|
|
|
|
using where = cursor::where_type;
|
|
|
|
|
|
|
|
const_iterator find(const id &);
|
|
|
|
const_iterator begin();
|
|
|
|
const_iterator end();
|
2017-08-18 20:19:13 +02:00
|
|
|
|
2017-09-08 11:32:49 +02:00
|
|
|
void insert(const event &);
|
2017-09-09 21:20:00 +02:00
|
|
|
void insert(json::iov &);
|
2017-09-08 11:32:49 +02:00
|
|
|
}
|
2017-08-18 20:19:13 +02:00
|
|
|
|
2017-09-08 11:32:49 +02:00
|
|
|
struct ircd::m::events::transition
|
2017-08-23 23:10:28 +02:00
|
|
|
{
|
2017-09-08 11:32:49 +02:00
|
|
|
struct method
|
|
|
|
{
|
|
|
|
std::function<bool (const event &)> valid;
|
|
|
|
std::function<void (const event &) noexcept> effects;
|
|
|
|
};
|
|
|
|
|
|
|
|
const char *name;
|
|
|
|
struct method method;
|
|
|
|
unique_const_iterator<events::transition_list> it;
|
2017-08-18 20:19:13 +02:00
|
|
|
|
2017-09-08 11:32:49 +02:00
|
|
|
virtual bool valid(const event &event) const;
|
|
|
|
virtual void effects(const event &e);
|
|
|
|
|
|
|
|
transition(const char *const &name, struct method method);
|
|
|
|
transition(const char *const &name);
|
|
|
|
virtual ~transition() noexcept;
|
|
|
|
};
|