private void SendTraceMoney(string usageCode, string type, string @do, decimal amount, decimal level)
        {
            TraceLogSerializer traceLog = new TraceLogSerializer();

            AssignDefaultMandatoryAndDebugFields(traceLog, ActionType.TRACE_MONEY, this.DebugFlag);
            traceLog.AddTraceGoodsFields(usageCode, type, @do, amount, level);

            SendTraceLog(traceLog);
        }
        private void SendTraceSpeed(string intervalName, decimal loadingTime)
        {
            TraceLogSerializer traceLog = new TraceLogSerializer();

            AssignDefaultMandatoryAndDebugFields(traceLog, ActionType.TRACE_SPEED, this.DebugFlag);
            traceLog.AddTraceSpeedFields(intervalName, loadingTime);

            SendTraceLog(traceLog);
        }
        private void SendTraceLevelUp(decimal level)
        {
            TraceLogSerializer traceLog = new TraceLogSerializer();

            AssignDefaultMandatoryAndDebugFields(traceLog, ActionType.TRACE_LEVELUP, this.DebugFlag);
            traceLog.AddTraceLevelUpField(level);

            SendTraceLog(traceLog);
        }
        private void SendTraceFriendCount(int friendCount)
        {
            TraceLogSerializer traceLog = new TraceLogSerializer();

            AssignDefaultMandatoryAndDebugFields(traceLog, ActionType.TRACE_FRIENDS_COUNT, this.DebugFlag);
            traceLog.AddTraceFriendField(friendCount.ToString());

            SendTraceLog(traceLog);
        }
        private void SendTraceDeactivation(int duration)
        {
            TraceLogSerializer traceLog = new TraceLogSerializer();

            AssignDefaultMandatoryAndDebugFields(traceLog, ActionType.TRACE_DEACTIVATION, this.DebugFlag);
            traceLog.AddTraceDeactivateField(duration);

            SendTraceLog(traceLog);
        }
        private void SendTraceActivation()
        {
            TraceLogSerializer traceLog = new TraceLogSerializer();

            AssignDefaultMandatoryAndDebugFields(traceLog, ActionType.TRACE_ACTIVATION, this.DebugFlag);
//			AssignDefaultOptionalISFields(traceLog);

            SendTraceLog(traceLog);
        }
        private void SendTraceStart()
        {
            TraceLogSerializer traceLog = new TraceLogSerializer();

            AssignDefaultMandatoryAndDebugFields(traceLog, ActionType.TRACE_START, this.DebugFlag);
            AssignDefaultOptionalISFields(traceLog);

            SendTraceLog(traceLog);
        }
        private void SendTraceEvent(string eventType, string eventCode, string param1, string param2, decimal value, int level)
        {
            TraceLogSerializer traceLog = new TraceLogSerializer();

            AssignDefaultMandatoryAndDebugFields(traceLog, ActionType.TRACE_EVENT, this.DebugFlag);
            traceLog.AddTraceEventFields(eventType, eventCode, param1, param2, value);
            traceLog.AddExtendedLevelField(level);

            SendTraceLog(traceLog);
        }
        private void SendTracePurchase(string itemCode, decimal unitCost, string currency, decimal payment, int level)
        {
            TraceLogSerializer traceLog = new TraceLogSerializer();

            AssignDefaultMandatoryAndDebugFields(traceLog, ActionType.TRACE_PURCHASE, this.DebugFlag);
            traceLog.AddTracePurchaseFields(itemCode, unitCost, currency, payment);
            traceLog.AddExtendedLevelField(level);

            SendTraceLog(traceLog);
        }
        // -------------------

        private void SendTraceLog(TraceLogSerializer traceLog)
        {
            string json = traceLog.BuildJSON();

            UnityEngine.Debug.Log("Send Data : " + json);

            string encodedJSON    = WWW.EscapeURL(json);
            WWW    postLogRequest = new WWW(AFLAT_SERVER_URL, System.Text.Encoding.UTF8.GetBytes(encodedJSON));

            StartCoroutine(WaitForRequest(postLogRequest));
        }
        public TraceLogSerializer AssignDefaultOptionalISFields(TraceLogSerializer logSerializaer)
        {
            TraceLogOptionalISField optional = new TraceLogOptionalISField()
            {
                DeviceName  = this.DeviceInfo.DeviceName,
                Carrier     = this.DeviceInfo.Carrier,
                OS          = this.DeviceInfo.OS,
                OSVerions   = this.DeviceInfo.OSVersion,
                TimeZone    = this.DeviceInfo.TimeZone,
                CountryCode = this.DeviceInfo.CountryCode,
                Locale      = this.DeviceInfo.Locale
            };

            logSerializaer.AddOptionalISFields(optional);

            return(logSerializaer);
        }
        private TraceLogSerializer AssignDefaultMandatoryAndDebugFields(TraceLogSerializer logSerializer, string actionType, bool isDebug)
        {
            TraceLogMandatoryField mandatory = new TraceLogMandatoryField()
            {
                ProtocolVersion = PROTOCOL_VERSION,
                SDKVersion      = SDK_VERSION,
                CompanyId       = _companyId,
                AppId           = _appId,
                AppVersion      = _appVersion,
                UserId          = (_useLoggingUserId ? this.UserId : this.DeviceInfo.DeviceID),
                DeviceId        = this.DeviceInfo.DeviceID,
                ClientIP        = this.DeviceInfo.IP,
                ClientTimeStamp = (int)(System.DateTime.UtcNow - new System.DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds,
                ActionType      = actionType,
            };

            logSerializer.AddMandatoryFields(mandatory);
            logSerializer.IsDebug = isDebug;

            return(logSerializer);
        }