You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

178 lines
7.9 KiB

2 years ago
#ifndef __Client_h__
#define __Client_h__
#include "Common/Common.h"
#include "Common/Router.h"
#include "Common/TypesPub.h"
#include "Reason.h"
#include "Property.h"
enum LogLevel
{
LogError,
LogInfo,
LogDbg,
};
typedef void (*pfn_Log)(LogLevel level, const char *format, ...);
namespace Client
{
class ClientListener;
class MessageReceiver;
class ClientScheduler;
class Client;
typedef Common::Handle<ClientListener> ClientListenerPtr;
typedef Common::Handle<MessageReceiver> MessageReceiverPtr;
typedef Common::Handle<ClientScheduler> ClientSchedulerPtr;
typedef Common::Handle<Client> ClientPtr;
enum ConfigStatus
{
ConfigGetting,
ConfigReady,
ConfigError,
};
enum ClientStatus
{
StatusStopped, /* not startConnect, or stopConnect */
StatusLogining, /* login waitting */
StatusLogined, /* login success and alive connecting */
StatusAlived, /* login success and alive success */
StatusConnecting, /* login success, network error */
StatusConnected, /* login success, network connected */
StatusLogouting, /* logout waitting */
StatusLogouted, /* logout success */
StatusLoginError, /* login error */
StatusLogoutError, /* logout error */
};
enum ErrorReason
{
ReasonSuccess, /* no error */
ReasonNetworkError, /* network error */
ReasonInvalidAppKey, /* ConfigError: app-key error */
ReasonServerNotReady, /* ConfigError: server not ready */
ReasonInvalidDomain, /* StatusLoginError: domain error */
ReasonInvalidAccount, /* StatusLoginError: account error */
ReasonBannedAccount, /* StatusLoginError: banned error */
ReasonDeletedAccount, /* StatusLoginError: deleted error */
ReasonInvalidPassword, /* StatusLoginError: password error */
ReasonThirdAuthError, /* StatusLoginError: third auth error */
ReasonAnotherDeviceLogined, /* StatusLoginError: another device logined when forceFlag == 0 */
ReasonServerBusy, /* StatusLoginError: internal error, client retry after 0-300 seconds */
ReasonServerKickOff, /* StatusLogouted: kickOff by system */
ReasonSameSessionLogin, /* StatusLogouted: kickOff by another same AccountId/SessionId login */
ReasonSameDeviceLogin, /* StatusLogouted: kickOff by another same DeviceId login */
ReasonNotLogined, /* StatusLogoutError: logout when not logined */
ReasonTokenMismatch, /* StatusConnectingError: token-mismatch */
ReasonUnknown, /* other internal error */
};
class ExportAPI ClientListener : virtual public Common::Shared
{
public:
/* client configs changed */
virtual void onConfigsChanged(ConfigStatus status,ErrorReason reason) = 0;
/* client status changed */
virtual void onStatusChanged(ClientStatus status,ErrorReason reason) = 0;
virtual void onLocalStorageChanged(const Common::Stream& localStorage) = 0;
/* non ios system, must return true */
virtual bool onVoipSocketOpen(int socket) = 0;
virtual void onVoipSocketClose(int socket) = 0;
virtual void onOfflineMessagePosChanged(Common::Long pos) = 0;
/* must call client->onNotification_end when return false */
virtual bool onNotification_begin(Common::Long idx,const map<Common::String,Common::String>& params) = 0;
};
class ExportAPI MessageReceiver : virtual public Common::Shared
{
public:
virtual void onOnlineMessage(const Common::String& type,const map<Common::String,Common::String>& params,const Common::Stream& message) = 0;
virtual void onOfflineMessage(const Common::String& type,const map<Common::String,Common::String>& params,const Common::Stream& message) = 0;
};
class ExportAPI ClientScheduler : virtual public Common::Shared
{
public:
virtual void onSchd() = 0;
virtual void onNetworkChanged() {}
virtual void onClientStatusChanged(ClientStatus status,ErrorReason reason) {};
};
class ExportAPI Client : virtual public Common::Shared
{
public:
static ClientPtr create(const Common::String& routerServer,const Common::String& entryServer,const Common::String& appKey,const Common::StrStrMap& cfgs,const Common::StrStrMap& routerCfgs,const Common::Stream& localStorage,const ClientListenerPtr& listener);
static ClientPtr create(const Common::String& routerServer,const Common::String& entryServer,const Common::String& appKey,const Common::ApplicationPtr& application,const ClientListenerPtr& listener);
virtual Common::ApplicationPtr getApplication() = 0;
virtual Common::RouterClientPtr getRouterClient() = 0;
virtual void addScheduler(const ClientSchedulerPtr& scheduler) = 0;
virtual void removeScheduler(const ClientSchedulerPtr& scheduler) = 0;
virtual bool addMessageReceiver(const Common::String& msgType,const MessageReceiverPtr& receiver) = 0;
virtual void removeMessageReceiver(const Common::String& msgType) = 0;
/* clear local property when change account/session, not sync to server */
virtual void clearLocalClientPropertys() = 0;
/* to remove server property, set value to "" */
virtual void setClientProperty(const Common::String& name,const Common::String& value) = 0;
virtual void setClientPropertys(const Common::StrStrMap& props) = 0;
virtual void setOfflineMessagePos(Common::Long pos) = 0;
virtual void setAliveEnable(bool enable,int checkPeriodSec) = 0;
virtual void setLocation(double longitude,double latitude) = 0;
virtual void setChannelEnable(bool enable) = 0;
virtual void setNetworkChanged() = 0;
virtual void setClientBackground(bool background) = 0;
virtual void setClientForceLogin(bool forceLogin) = 0;
virtual void setClientAlwaysTryAlive(bool alwaysTryAlive) = 0;
virtual void setLoginOkFlag(bool bLogined) = 0;
virtual void setClientPassword(const Common::String& password) = 0;
virtual void onNotification_end(Common::Long idx) = 0;
virtual void workModeIncRef() = 0;
virtual void workModeDecRef() = 0;
virtual bool isInWorkMode() = 0;
virtual bool isConfigReady() = 0;
virtual Common::String getAppConfig(const Common::String& name) = 0;
virtual Common::ObjectAgentPtr getUserEntry() = 0;
virtual Common::ObjectAgentPtr getAccountEntry() = 0;
virtual void startConnect(const Common::String& accountId,const Common::String& sessionId,const Common::String& accountPwd) = 0;
virtual void stopConnect() = 0;
virtual void logout() = 0;
/* refresh and if logined, start swapCalls */
virtual void checkRequests() = 0;
virtual void close() = 0;
virtual ConfigStatus getConfigStatus(ErrorReason& reason) = 0;
virtual ClientStatus getClientStatus(ErrorReason& reason) = 0;
virtual Common::String getKickOffReason() = 0;
virtual Common::String getAccountId() = 0;
virtual Common::String getSessionId() = 0;
virtual Common::String getUserId() = 0;
virtual Common::String getRouterInfo() = 0;
virtual Common::String getPathProperties() = 0;
virtual Common::String getCc() = 0;
virtual bool getClientLoadResult() = 0;
virtual bool getChannelEnable() = 0;
virtual Common::ObjectAgentPtr createAgent(const Common::String& oid,bool cachable = false) = 0;
virtual bool addServer(const Common::String& name,const Common::ObjectServerPtr& server) = 0;
virtual void removeServer(const Common::String& name) = 0;
public:
static pfn_Log _pfn_log;
};
};
#endif