private IEnumerator Send()
        {
            if (false == socket.IsConnected())
            {
                yield return(GamebaseCoroutineManager.StartCoroutine(GamebaseGameObjectManager.GameObjectType.WEBSOCKET_TYPE, RetryConnect()));

                yield break;
            }
            else
            {
                if (0 < requestQueueItem.retryCount)
                {
                    GamebaseLog.Debug(string.Format("Reconnect succeeded. Index of queue item:{0}", requestQueueItem.index), this);
                }
            }

            GamebaseLog.Debug(string.Format("request:{0}", GamebaseJsonUtil.ToPrettyJsonString(requestQueueItem.requestVO)), this);
            yield return(GamebaseCoroutineManager.StartCoroutine(GamebaseGameObjectManager.GameObjectType.WEBSOCKET_TYPE, socket.Send(JsonMapper.ToJson(requestQueueItem.requestVO), (error) =>
            {
                if (null == error)
                {
                    return;
                }

                error.transactionId = requestQueueItem.requestVO.transactionId;
                requestQueueItem.callback(string.Empty, error);
            })));

            socket.SetPollingInterval(PollingIntervalType.SHORT_INTERVAL);
            GamebaseCoroutineManager.StartCoroutine(GamebaseGameObjectManager.GameObjectType.WEBSOCKET_TYPE, CheckTimeout());
        }
        public void OnServerPush(string response)
        {
            GamebaseLog.Debug(response, this, "OnServerPush");

            ServerPushMessage message = JsonMapper.ToObject <ServerPushMessage>(response);

            CommonResponse.Header.ServerPush serverPush = message.header.serverPush;

            if (true == serverPush.type.Equals(GamebaseServerPushType.APP_KICKOUT) && true == string.IsNullOrEmpty(GamebaseImplementation.Instance.GetUserID()))
            {
                return;
            }

            if (false == stampSet.Add(serverPush.stamp))
            {
                return;
            }

            if (true == serverPush.disconnect)
            {
                WebSocket.Instance.Disconnect();
            }

            if (true == serverPush.stopHeartbeat)
            {
                Heartbeat.Instance.StopHeartbeat();
            }

            GamebaseSystemPopup.Instance.ShowServerPushPopup(message.popup);

            SendServerPushMessage(serverPush.type, message.result);
        }
        public void ShowHeartbeatErrorPopup(GamebaseError error)
        {
            if (true == Gamebase.IsSuccess(error))
            {
                return;
            }

            GamebaseLog.Debug(string.Format("ErrorCode : {0}", error.code), this);

            switch (error.code)
            {
            case GamebaseErrorCode.BANNED_MEMBER:                       // 이용정지 KickOut
            {
                ShowKickOutPopup();
                break;
            }

            case GamebaseErrorCode.INVALID_MEMBER:                      // 잘못된 사용자 KickOut
            {
                break;
            }

            default:
            {
                break;
            }
            }
        }
        public IEnumerator Connect(GamebaseCallback.ErrorDelegate callback)
        {
            CreateSocket();

            float waitTime = 0;

            while (false == IsConnected() && null == GetErrorMessage() && waitTime < CommunicatorConfiguration.connectionTimeout)
            {
                waitTime += Time.unscaledDeltaTime;
                yield return(null);
            }

            GamebaseError error = null;

            if (false == string.IsNullOrEmpty(GetErrorMessage()))
            {
                error = new GamebaseError(GamebaseErrorCode.SOCKET_ERROR, message: GetErrorMessage());
            }
            else
            {
                if (waitTime >= CommunicatorConfiguration.connectionTimeout)
                {
                    error = new GamebaseError(GamebaseErrorCode.SOCKET_ERROR);
                }
                else
                {
                    GamebaseLog.Debug("socket connected.", this, "Connect");
                }
            }

            StartRecvPolling();

            callback(error);
        }
예제 #5
0
        private IEnumerator Send()
        {
            if (false == socket.IsConnected())
            {
                yield return(GamebaseUnitySDKSettings.Instance.StartCoroutine(RetryConnect()));

                yield break;
            }
            else
            {
                if (0 < requestQueueItem.retryCount)
                {
                    GamebaseLog.Debug(string.Format("Reconnect succeeded. Index of queue item:{0}", requestQueueItem.index), this, "Send");
                }
            }

            GamebaseLog.Debug(string.Format("request:{0}", JsonMapper.ToJson(requestQueueItem.requestVO)), this, "Send");
            yield return(GamebaseUnitySDKSettings.Instance.StartCoroutine(socket.Send(JsonMapper.ToJson(requestQueueItem.requestVO), (error) =>
            {
                if (null == error)
                {
                    return;
                }

                error.transactionId = requestQueueItem.requestVO.transactionId;
                requestQueueItem.callback(string.Empty, error);
            })));

            socket.SetPollingInterval(PollingIntervalType.SHORT_INTERVAL);
            GamebaseUnitySDKSettings.Instance.StartCoroutine(CheckTimeout());
        }
        public void SetRemoteSettings(GamebaseResponse.Launching.LaunchingInfo launchingInfo)
        {
            if (launchingInfo == null ||
                launchingInfo.launching == null ||
                launchingInfo.launching.tcgbClient == null)
            {
                return;
            }

            var forceRemoteSettings = launchingInfo.launching.tcgbClient.forceRemoteSettings;

            if (forceRemoteSettings != null)
            {
                GamebaseLog.Debug(GamebaseJsonUtil.ToPrettyJsonString(forceRemoteSettings), this);

                logSetting.Initialize(forceRemoteSettings.log.policy, forceRemoteSettings.log.indicator);

                GamebaseLog.SetDebugLog(logSetting.IsDebugMode(isDebugMode));

                GamebaseLogReport.Instance.Initialize(
                    logSetting.IsIndicatorMode(),
                    forceRemoteSettings.log.appKeyIndicator,
                    forceRemoteSettings.log.appKeyLog);
            }
            else
            {
                GamebaseLog.Debug("ForceRemoteSettings is null", this);
            }
        }
예제 #7
0
        public void ShowErrorPopup(GamebaseError error, BaseVO vo = null)
        {
            if (true == Gamebase.IsSuccess(error))
            {
                return;
            }

            GamebaseLog.Debug(
                string.Format("ErrorCode : {0}", error.code),
                this,
                "ShowErrorPopup");

            switch (error.code)
            {
            case GamebaseErrorCode.AUTH_BANNED_MEMBER:                  // 이용정지
            {
                ShowBanPopup((AuthResponse.LoginInfo)vo);
                break;
            }

            default:
            {
                break;
            }
            }
        }
        public void OnAsyncEvent(string jsonString)
        {
            GamebaseLog.Debug(string.Format("jsonString : {0}", jsonString), this);

            NativeMessage message = JsonMapper.ToObject <NativeMessage>(jsonString);

            if (message == null)
            {
                GamebaseLog.Debug("JSON parsing error. message object is null.", this);
                return;
            }

            DelegateManager.DelegateData delegateData = DelegateManager.GetDelegate(message.scheme);

            if (delegateData != null)
            {
                if (delegateData.pluginEventDelegate != null)
                {
                    delegateData.pluginEventDelegate(message);
                }
                if (delegateData.eventDelegate != null)
                {
                    delegateData.eventDelegate(message);
                }
            }
        }
 internal JsonException(ParserToken token,
                        Exception inner_exception) :
     base(String.Format(
              "Invalid token '{0}' in input string", token),
          inner_exception)
 {
     GamebaseLog.Debug(string.Format("JsonException token:{0}, inner_exception:{1}", token, inner_exception), this);
 }
        virtual protected void InvokeCredentialInfoMethod(string providerName, int handle, string methodName, string forcingMappingKey = null)
        {
            bool hasAdapter = AuthAdapterManager.Instance.CreateIDPAdapter(providerName);

            if (hasAdapter == true)
            {
                AuthAdapterManager.Instance.GetIDPCredentialInfo(providerName, (credentialInfo, adapterError) =>
                {
                    if (Gamebase.IsSuccess(adapterError) == true)
                    {
                        GamebaseExtraDataHandler.RegisterExtraData(handle, providerName);

                        if (methodName.Equals("Login", StringComparison.Ordinal) == true)
                        {
                            Login(credentialInfo, handle);
                        }
                        else if (methodName.Equals("AddMapping", StringComparison.Ordinal) == true)
                        {
                            AddMapping(credentialInfo, handle);
                        }
                        else if (methodName.Equals("AddMappingForcibly", StringComparison.Ordinal) == true)
                        {
                            AddMappingForcibly(credentialInfo, forcingMappingKey, handle);
                        }
                    }
                    else
                    {
                        var callback = GamebaseCallbackHandler.GetCallback <GamebaseCallback.GamebaseDelegate <GamebaseResponse.Auth.AuthToken> >(handle);

                        if (callback == null)
                        {
                            return;
                        }

                        AuthAdapterManager.Instance.IDPLogout(providerName);
                        callback(null, new GamebaseError(GamebaseErrorCode.AUTH_IDP_LOGIN_FAILED, "AndroidGamebaseAuth", error: adapterError));
                    }
                });
            }
            else
            {
                GamebaseLog.Debug("Call native method", this);

                if (methodName.Equals("Login", StringComparison.Ordinal) == true)
                {
                    CallNativeLogin(providerName, handle);
                }
                else if (methodName.Equals("AddMapping", StringComparison.Ordinal) == true)
                {
                    CallNativeMapping(providerName, handle);
                }
                else if (methodName.Equals("AddMappingForcibly", StringComparison.Ordinal) == true)
                {
                    CallNativeMappingForcibly(providerName, forcingMappingKey, handle);
                }
            }
        }
예제 #11
0
        public void RequestLaunchingStatus(int handle = -1)
        {
            GamebaseLog.Debug("Check Launching Status", this);
            statusElaspedTime = 0;

            requestVO.apiId = Lighthouse.API.Launching.ID.GET_LAUNCHING_STATUS;
            WebSocket.Instance.Request(requestVO, (response, error) =>
            {
                GamebaseSystemPopup.Instance.ShowErrorPopup(error);

                if (null != error)
                {
                    return;
                }

                var launchingInfo   = DataContainer.GetData <LaunchingResponse.LaunchingInfo>(VOKey.Launching.LAUNCHING_INFO);
                var launchingStatus = JsonMapper.ToObject <LaunchingResponse.LaunchingStatus>(response);
                if (launchingInfo.launching.status.code == launchingStatus.launching.status.code)
                {
                    OnLaunchingInfoCallback(handle);
                    return;
                }

                GamebaseLog.Debug("Check Launching Info", this);

                GamebaseCallback.GamebaseDelegate <GamebaseResponse.Launching.LaunchingInfo> launchingInfoCallback = (launchingInfoTemp, errorTemp) =>
                {
                    var launchingStatusCallback = GamebaseCallbackHandler.GetCallback <GamebaseCallback.DataDelegate <GamebaseResponse.Launching.LaunchingStatus> >(scheduleHandle);
                    if (null != launchingStatusCallback)
                    {
                        var vo     = new GamebaseResponse.Launching.LaunchingStatus();
                        vo.code    = launchingStatus.launching.status.code;
                        vo.message = launchingStatus.launching.status.message;

                        launchingStatusCallback(vo);
                    }

                    var observerCallback = GamebaseCallbackHandler.GetCallback <GamebaseCallback.DataDelegate <GamebaseResponse.SDK.ObserverMessage> >(GamebaseObserverManager.Instance.Handle);
                    if (null != observerCallback)
                    {
                        var vo  = new GamebaseResponse.SDK.ObserverMessage();
                        vo.type = GamebaseObserverType.LAUNCHING;
                        vo.data = new System.Collections.Generic.Dictionary <string, object>();
                        vo.data.Add("code", launchingStatus.launching.status.code);
                        vo.data.Add("message", launchingStatus.launching.status.message);
                        observerCallback(vo);
                    }

                    OnLaunchingInfoCallback(handle);
                };

                int handleTemp = GamebaseCallbackHandler.RegisterCallback(launchingInfoCallback);

                GetLaunchingInfo(handleTemp);
            });
        }
예제 #12
0
        public void SetExtraData(Dictionary <string, string> extraData)
        {
            if (adapter == null)
            {
                GamebaseLog.Debug(GamebaseStrings.PURCHASE_ADAPTER_NOT_FOUND, this);
                return;
            }

            adapter.SetExtraData(extraData);
        }
예제 #13
0
        public void SetConfiguration(GamebaseRequest.Purchase.Configuration iapConfiguration)
        {
            if (adapter == null)
            {
                GamebaseLog.Debug(GamebaseStrings.PURCHASE_ADAPTER_NOT_FOUND, this);
                return;
            }

            adapter.SetConfiguration(iapConfiguration);
        }
예제 #14
0
        public void Initialize()
        {
            if (adapter == null)
            {
                GamebaseLog.Debug(GamebaseStrings.PURCHASE_ADAPTER_NOT_FOUND, this);
                return;
            }

            adapter.Initialize();
        }
        public void StopHeartbeat()
        {
            if (HeartbeatStatus.Stop == status)
            {
                return;
            }

            GamebaseLog.Debug("Stop Heartbeat", this, "StopHeartbeat");

            status = HeartbeatStatus.Stop;
        }
        public void StartHeartbeat()
        {
            if (false == IsSendable())
            {
                return;
            }

            GamebaseLog.Debug("Start Heartbeat", this, "StartHeartbeat");

            status = HeartbeatStatus.Start;
            GamebaseUnitySDKSettings.Instance.StartCoroutine(ExecuteHeartbeat());
        }
예제 #17
0
        private void ExecuteSchedule()
        {
            GamebaseLog.Debug("Start Launching Status Schedule", this);

            if (isPlaySchedule == true)
            {
                return;
            }

            isPlaySchedule = true;
            GamebaseCoroutineManager.StartCoroutine(GamebaseGameObjectManager.GameObjectType.LAUNCHING_TYPE, ScheduleLaunchingStatus());
        }
        public string GetSync(string jsonString)
        {
            GamebaseLog.Debug(string.Format("jsonString : {0}", jsonString), this, "GetSync");
            string retValue = string.Empty;
            IntPtr result   = getSync(jsonString);

            if (result != IntPtr.Zero)
            {
                retValue = Marshal.PtrToStringAnsi(result);
            }
            return(retValue);
        }
예제 #19
0
        public void StartHeartbeat()
        {
            if (false == IsSendable())
            {
                return;
            }

            GamebaseLog.Debug("Start Heartbeat", this);

            status = HeartbeatStatus.Start;
            GamebaseCoroutineManager.StartCoroutine(GamebaseGameObjectManager.GameObjectType.HEARTBEAT_TYPE, ExecuteHeartbeat());
        }
        private void ExecuteSchedule()
        {
            GamebaseLog.Debug("Start Launching Status Schedule", this, "ExecuteSchedule");

            if (true == isPlaySchedule)
            {
                return;
            }

            isPlaySchedule = true;
            GamebaseUnitySDKSettings.Instance.StartCoroutine(ScheduleLaunchingStatus());
        }
        public void SetUserMeta(RequestType type)
        {
            if (string.IsNullOrEmpty(Gamebase.GetUserID()) == true)
            {
                GamebaseLog.Warn("Not LoggedIn", this, "SetUserMeta");
                return;
            }

            GamebaseLog.Debug(
                string.Format("SetUserMeta Type : {0}", type.ToString()),
                this,
                "SetUserMeta");

            AnalyticsRequest.UserMetaVO vo = new AnalyticsRequest.UserMetaVO();
            vo.payload.appId    = GamebaseUnitySDK.AppID;
            vo.parameter.userId = Gamebase.GetUserID();

            switch (type)
            {
            case RequestType.USER_DATA:
            {
                vo.payload.userMetaData = MakeUserMetaData();
                break;
            }

            case RequestType.LEVEL_UP:
            {
                vo.payload.userMetaData = MakeLevelUpData();
                break;
            }
            }

            var requestVO = new WebSocketRequest.RequestVO(PRODUCT_ID, Lighthouse.API.VERSION, GamebaseUnitySDK.AppID);

            requestVO.apiId      = ID.SET_USER_META;
            requestVO.payload    = JsonMapper.ToJson(vo.payload);
            requestVO.parameters = vo.parameter;

            WebSocket.Instance.Request(requestVO, (response, error) =>
            {
                if (Gamebase.IsSuccess(error) == false)
                {
                    GamebaseLog.Warn(
                        string.Format(
                            "{0}\n{1}",
                            "Failed request.",
                            GamebaseJsonUtil.ToPrettyJsonString(error)),
                        this,
                        "SetUserMeta");
                }
            });
        }
        public string GetSync(string jsonString)
        {
            GamebaseLog.Debug(string.Format("jsonString : {0}", GamebaseJsonUtil.ToPrettyJsonString(jsonString)), this);

            string retValue = jc.CallStatic <string>("getSync", jsonString);

            if (string.IsNullOrEmpty(retValue) == false)
            {
                GamebaseLog.Debug(string.Format("retValue : {0}", retValue), this);
            }

            return(retValue);
        }
예제 #23
0
        private void SetIapExtraData(string providerName)
        {
            GamebaseLog.Debug("SetIapExtraData", this);
            ToastSdk.UserId = Gamebase.GetUserID();

            var userId = Gamebase.GetAuthProviderUserID(providerName);

            PurchaseAdapterManager.Instance.SetExtraData(
                new Dictionary <string, string>()
            {
                { KEY_IAP_EXTRA_USER_ID, userId }
            });
        }
        private void SendServerPushMessage(string type, string data)
        {
            GamebaseLog.Debug(string.Format("type : {0}, data : {1}", type, data), this);
            GamebaseResponse.SDK.ServerPushMessage serverPushMessage = new GamebaseResponse.SDK.ServerPushMessage();
            serverPushMessage.type = type;
            serverPushMessage.data = data;

            var pushCallback = GamebaseCallbackHandler.GetCallback<GamebaseCallback.DataDelegate<GamebaseResponse.SDK.ServerPushMessage>>(GamebaseServerPushEventManager.Instance.Handle);
            if (null != pushCallback)
            {
                pushCallback(serverPushMessage);
            }
        }
        public void StartIntrospect()
        {
            if (IsSendable() == false)
            {
                return;
            }

            GamebaseLog.Debug("Start Introspect", this);

            sentIntervalTime = refrashIntervalTime;
            sentStandardTime = Time.realtimeSinceStartup;

            GamebaseCoroutineManager.StartCoroutine(GamebaseGameObjectManager.GameObjectType.INTROSPECT_TYPE, ExecuteIntrospect());
        }
        public IEnumerator Reconnect(GamebaseCallback.ErrorDelegate callback)
        {
            GamebaseLog.Debug(string.Format("SocketState:{0}", SocketState(nativeRef)), this);

            if (DEFAULT_NATIVE_REF != nativeRef)
            {
                if ((int)WebSocketState.Open == SocketState(nativeRef))
                {
                    callback(null);
                    yield break;
                }
            }

            Close();
            yield return(GamebaseCoroutineManager.StartCoroutine(GamebaseGameObjectManager.GameObjectType.WEBSOCKET_TYPE, Connect(callback)));
        }
        public IEnumerator Reconnect(GamebaseCallback.ErrorDelegate callback)
        {
            GamebaseLog.Debug(string.Format("SocketState:{0}", SocketState(nativeRef)), this, "Reconnect");

            if (DEFAULT_NATIVE_REF != nativeRef)
            {
                if ((int)WebSocketState.Open == SocketState(nativeRef))
                {
                    callback(null);
                    yield break;
                }
            }

            Close();
            yield return(GamebaseUnitySDKSettings.Instance.StartCoroutine(Connect(callback)));
        }
예제 #28
0
        public GamebaseResponse.Auth.AuthProviderProfile GetAuthProviderProfile(string providerName)
        {
            if (GamebaseAuthProvider.GUEST == providerName)
            {
                GamebaseLog.Debug("Guest does not have profile information.", this);
                return(null);
            }

            if (true == string.IsNullOrEmpty(Gamebase.GetUserID()))
            {
                GamebaseLog.Debug(GamebaseStrings.NOT_LOGGED_IN, this);
                return(null);
            }

            return(AuthAdapterManager.Instance.GetIDPData <GamebaseResponse.Auth.AuthProviderProfile>(providerName, AuthAdapterManager.MethodName.GET_IDP_PROFILE));
        }
        public void ShowKickOutPopup()
        {
            GamebaseLog.Debug("ShowKickOutPopup", this);
            if (false == GamebaseUnitySDK.EnablePopup || false == GamebaseUnitySDK.EnableKickoutPopup)
            {
                return;
            }

            ShowSystemPopup(
                GamebaseUtilAlertType.ALERT_OK,
                DisplayLanguage.Instance.GetString("common_notice_title"),
                DisplayLanguage.Instance.GetString("ban_user_message"),
                string.Empty,
                DisplayLanguage.Instance.GetString("common_close_button"),
                string.Empty,
                (buttonID) => { });
        }
예제 #30
0
        public bool CanLaunchingStatusUpdate()
        {
            float statusElaspedTime = GamebaseLaunchingImplementation.Instance.GetStatusElaspedTime();

            if (statusElaspedTime >= LAUNCHING_STATUS_EXPIRE_TIME)
            {
                GamebaseLog.Debug(
                    string.Format(
                        "LaunchingStatusElaspedTime : {0} (Standard is more than {1})",
                        statusElaspedTime,
                        LAUNCHING_STATUS_EXPIRE_TIME),
                    this);
                return(true);
            }

            return(false);
        }