// // Lol Engine // // Copyright: (c) 2013 Benjamin "Touky" Huet <huet.benjamin@gmail.com> // 2013 Sam Hocevar <sam@hocevar.net> // This program is free software; you can redistribute it and/or // modify it under the terms of the Do What The Fuck You Want To // Public License, Version 2, as published by Sam Hocevar. See // http://www.wtfpl.net/ for more details. // #if defined HAVE_CONFIG_H # include "config.h" #endif #include <cstring> #include <cstdlib> #include <time.h> #include "core.h" namespace lol { /* * The global g_renderer object, initialised by Video::Init */ MessageService *g_messageservice = nullptr; //----------------------------------------------------------------------------- // Ctor/Dtor //---- MessageService::MessageService() { } MessageService::~MessageService() { m_bucket.Empty(); } //Setup/Destroy void MessageService::Setup(int bucket_size) { g_messageservice = new MessageService(); g_messageservice->m_bucket.Resize(bucket_size); } void MessageService::Destroy() { delete g_messageservice; g_messageservice = nullptr; } //----------------------------------------------------------------------------- bool MessageService::Send(int id, const String& message) { if (g_messageservice) { ASSERT(0 <= id && id < g_messageservice->m_bucket.Count()); return g_messageservice->Send(id, message.C()); } return false; } bool MessageService::Send(int id, const char* message) { if (g_messageservice) { ASSERT(0 <= id && id < g_messageservice->m_bucket.Count()); MessageService& g = *g_messageservice; Array<MessageList>& bucket = g.m_bucket[id]; bucket << MessageList(time(nullptr), String(message)); return true; } return false; } //---- bool MessageService::FetchFirst(int id, String& message) { if (g_messageservice) { ASSERT(0 <= id && id < g_messageservice->m_bucket.Count()); time_t timestamp; return g_messageservice->FetchFirst(id, message, timestamp); } return false; } bool MessageService::FetchFirst(int id, String& message, time_t& timestamp) { if (g_messageservice) { ASSERT(0 <= id && id < g_messageservice->m_bucket.Count()); MessageService& g = *g_messageservice; Array<MessageList>& bucket = g.m_bucket[id]; if (bucket.Count()) { message = bucket[0].m_message; timestamp = bucket[0].m_timestamp; bucket.Remove(0); return true; } } return false; } //---- bool MessageService::FetchAll(int id, String& message) { if (g_messageservice) { ASSERT(0 <= id && id < g_messageservice->m_bucket.Count()); time_t timestamp; return g_messageservice->FetchAll(id, message, timestamp); } return false; } bool MessageService::FetchAll(int id, String& message, time_t& first_timestamp) { if (g_messageservice) { ASSERT(0 <= id && id < g_messageservice->m_bucket.Count()); MessageService& g = *g_messageservice; Array<MessageList>& bucket = g.m_bucket[id]; message = String(""); if (bucket.Count()) { first_timestamp = bucket[0].m_timestamp; for (int i = 0; i < bucket.Count(); ++i) message += bucket[i].m_message; bucket.Empty(); return true; } } return false; } } /* namespace lol */