Added WebSocket support.

This commit is contained in:
Преподобный Ален
2022-05-25 11:58:10 +03:00
parent 885ae699e8
commit e0ea1fcf34
5 changed files with 1563 additions and 0 deletions

224
src/app/Context.hpp Normal file
View File

@@ -0,0 +1,224 @@
/*++
Module Name:
Client.hpp
Notices:
Dial Module
Author:
Copyright (c) Prepodobny Alen
mailto: alienufo@inbox.ru
mailto: ufocomp@gmail.com
--*/
#ifndef APOSTOL_DM_CONTEXT_HPP
#define APOSTOL_DM_CONTEXT_HPP
//----------------------------------------------------------------------------------------------------------------------
#define BPS_DEFAULT_SYNC_PERIOD 30
#define BPS_SERVER_PORT 4977
#define BPS_SERVER_URL "http://localhost:4977"
#define BPS_BM_SERVER_ADDRESS "BM-2cX8y9u9yEi3fdqQfndx9F6NdR5Hv79add"
#define BPS_BM_DEBUG_ADDRESS "BM-2cXtL92m3CavBKx8qsV2LbZtAU3eQxW2rB"
//----------------------------------------------------------------------------------------------------------------------
#ifdef __cplusplus
extern "C++" {
#endif // __cplusplus
namespace Apostol {
namespace Context {
struct CKeyContext {
CString Name;
CString Key;
enum CKeyStatus {
ksUnknown = -1,
ksFetching,
ksSuccess,
ksError,
} Status;
CDateTime StatusTime;
CDateTime RunTime;
CKeyContext(): Status(ksUnknown), StatusTime(0), RunTime(0) {
Name = "PUBLIC";
}
CKeyContext(const CString &Name, const CString &Key): CKeyContext() {
this->Name = Name;
this->Key = Key;
}
CKeyContext(const CKeyContext &KeyContext): CKeyContext() {
Assign(KeyContext);
}
void Assign(const CKeyContext &KeyContext) {
this->Name = KeyContext.Name;
this->Key = KeyContext.Key;
this->Status = KeyContext.Status;
this->StatusTime = KeyContext.StatusTime;
this->RunTime = KeyContext.RunTime;
}
void Clear() {
Name.Clear();
Key.Clear();
Status = ksUnknown;
StatusTime = 0;
RunTime = 0;
}
CKeyContext& operator= (const CKeyContext &KeyContext) {
if (this != &KeyContext) {
Assign(KeyContext);
}
return *this;
};
};
//--------------------------------------------------------------------------------------------------------------
//-- CContext --------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------
enum CContextStatus { csInitialization = 0, csInitialized, csAuthorization, csAuthorized, csInProgress, csRunning };
//--------------------------------------------------------------------------------------------------------------
class CContext: public CObject {
private:
CContextStatus m_Status = csInitialization;
CDateTime m_CheckDate = 0;
CDateTime m_FixedDate = 0;
CString m_Name {};
CLocation m_URL {};
CString m_Session {};
CString m_Secret {};
CKeyContext m_PGP {};
CKeyContext m_BTC {};
CStringList m_BTCKeys {};
CStringList m_Tokens {};
CProviders m_Providers {};
public:
CContext() = default;
CContext(const CContext &Context): CContext() {
Assign(Context);
}
explicit CContext(const CLocation &URL): CContext() {
m_URL = URL;
}
void Assign(const CContext &Context) {
m_Status = Context.m_Status;
m_CheckDate = Context.m_CheckDate;
m_FixedDate = Context.m_FixedDate;
m_Name = Context.m_Name;
m_URL = Context.m_URL;
m_Session = Context.m_Session;
m_Secret = Context.m_Secret;
m_PGP = Context.m_PGP;
m_BTC = Context.m_BTC;
m_BTCKeys = Context.m_BTCKeys;
m_Tokens = Context.m_Tokens;
m_Providers = Context.m_Providers;
}
virtual void Clear() {
m_Status = csInitialization;
m_CheckDate = 0;
m_FixedDate = 0;
m_Name.Clear();
m_URL.Clear();
m_Session.Clear();
m_Secret.Clear();
m_PGP.Clear();
m_BTC.Clear();
m_BTCKeys.Clear();
m_Tokens.Clear();
m_Providers.Clear();
};
const CLocation& URL() const { return m_URL; }
CContextStatus Status() const { return m_Status; }
void SetStatus(CContextStatus Status) { m_Status = Status; }
CDateTime CheckDate() const { return m_CheckDate; }
void SetCheckDate(CDateTime Value) { m_CheckDate = Value; }
CDateTime FixedDate() const { return m_FixedDate; }
void SetFixedDate(CDateTime Value) { m_FixedDate = Value; }
CString& Name() { return m_Name; }
const CString& Name() const { return m_Name; }
CString& Session() { return m_Session; }
const CString& Session() const { return m_Session; }
CString& Secret() { return m_Secret; }
const CString& Secret() const { return m_Secret; }
CKeyContext& PGP() { return m_PGP; }
const CKeyContext& PGP() const { return m_PGP; }
CKeyContext& BTC() { return m_BTC; }
const CKeyContext& BTC() const { return m_BTC; }
CStringList& BTCKeys() { return m_BTCKeys; }
const CStringList& BTCKeys() const { return m_BTCKeys; }
CStringList& Tokens() { return m_Tokens; }
const CStringList& Tokens() const { return m_Tokens; }
CProviders& Providers() { return m_Providers; }
const CProviders& Providers() const { return m_Providers; }
CContext& operator= (const CContext &Context) {
if (this != &Context) {
Assign(Context);
}
return *this;
};
};
//--------------------------------------------------------------------------------------------------------------
typedef TPair<CContext> CContextPair;
typedef TPairs<CContext> CContextList;
}
}
using namespace Apostol::Context;
#ifdef __cplusplus
}
#endif // __cplusplus
#endif //APOSTOL_DM_CONTEXT_HPP