phoenix-firestorm/indra/newview/fsdiscordconnect.h

93 lines
3.0 KiB
C++

/**
* @file fsdiscordconnect.h
* @brief Connection to Discord
* @author liny@pinkfox.xyz
*
* $LicenseInfo:firstyear=2013&license=viewerlgpl$
* Phoenix Firestorm Viewer Source Code
* Copyright (C) 2019 Liny Odell @ Second Life
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
* http://www.firestormviewer.org
*/
#ifndef FS_FSDISCORDCONNECT_H
#define FS_FSDISCORDCONNECT_H
#include "llsingleton.h"
#include "llcoros.h"
#include "lleventcoro.h"
class LLEventPump;
class FSDiscordConnect : public LLSingleton<FSDiscordConnect>
{
LLSINGLETON(FSDiscordConnect);
LOG_CLASS(FSDiscordConnect);
public:
enum EConnectionState
{
DISCORD_NOT_CONNECTED = 0,
DISCORD_CONNECTION_IN_PROGRESS = 1,
DISCORD_CONNECTED = 2,
DISCORD_CONNECTION_FAILED = 3,
DISCORD_DISCONNECTING = 4
};
~FSDiscordConnect();
void connectToDiscord(); // Initiate the complete Discord connection. Please use checkConnectionToDiscord() in normal use.
void disconnectFromDiscord(); // Disconnect from the Discord service.
void checkConnectionToDiscord(bool auto_connect = false); // Check if connected to the Discord service. If not, call connectToDiscord().
void storeInfo(const LLSD& info);
const LLSD& getInfo() const;
void clearInfo();
void setConnectionState(EConnectionState connection_state);
void setConnected(bool connected);
bool isConnected() const { return mConnected; }
EConnectionState getConnectionState() { return mConnectionState; }
void updateRichPresence() const;
bool Tick(const LLSD&);
private:
EConnectionState mConnectionState;
bool mConnected;
LLSD mInfo;
bool mRefreshInfo;
static std::unique_ptr<LLEventPump> sStateWatcher;
static std::unique_ptr<LLEventPump> sInfoWatcher;
void discordConnectCoro();
void discordDisconnectCoro();
void discordConnectedCoro(bool autoConnect);
bool checkMarkerFile() const;
void setMarkerFile();
void clearMarkerFile();
std::string mMarkerFilename;
time_t mConnectTime;
};
#endif // FS_FSDISCORDCONNECT_H