public async Task EndInteraction(InteractionEndSendJsonData json, Action <bool, InteractionEndReceiveJsonData> callback)
    {
        InteractionEndReceiveJsonData data;

        if (!useServer)
        {
            //data = new InteractionEndReceiveJsonData();
            //callback(true, data);
            return;
        }

        string sendJson = JsonUtility.ToJson(json);
        string url;

        if (!useMocky)
        {
            //Debug.Log("Using actual server url...");
            url = "http://" + ip + port + interactionServletUrl + "endInteraction/" + TrinaxGlobal.Instance.userData.interactionID;
        }
        else
        {
            //Debug.Log("Using mocky url...");
            return;
        }

        var r = await LoadPostUrl(url, sendJson, (request) =>
        {
            if (string.IsNullOrEmpty(request.error))
            {
                string result = request.text.Trim();
                data          = JsonUtility.FromJson <InteractionEndReceiveJsonData>(result);

                if (data.error.error_code == ERROR_CODE_200)
                {
                    callback(true, data);
                }
                else
                {
                    callback(false, data);
                }
            }
            else
            {
                //WriteError(request, "EndInteraction");
                data = new InteractionEndReceiveJsonData();
                callback(false, data);
            }
        });

        //Debug.Log(r);
    }
    public async Task EndInteraction(Action <bool, InteractionEndReceiveJsonData> callback)
    {
        InteractionEndReceiveJsonData data;

        if (!useServer)
        {
            data = new InteractionEndReceiveJsonData();
            callback(true, data);
            return;
        }

        string url;

        if (!useMocky)
        {
            //Debug.Log("Using actual server url...");
            url = "http://" + ip + port + interactionServletUrl + "endInteraction/" + TrinaxGlobal.Instance.userData.interactionID;
        }
        else
        {
            //Debug.Log("Using mocky url...");
            url = "http://www.mocky.io/v2/5b6122fb3000007f006a3ffc";
        }

        var r = await LoadUrlAsync(url, (request) =>
        {
            if (string.IsNullOrEmpty(request.error))
            {
                string result = request.downloadHandler.text.Trim();
                data          = JsonUtility.FromJson <InteractionEndReceiveJsonData>(result);
                //Debug.Log("myresult: " + result);

                if (data.error.error_code == ERROR_CODE_200)
                {
                    callback(true, data);
                }
                else
                {
                    callback(false, data);
                }
            }
            else
            {
                WriteError(request, "EndInteraction");
                data = new InteractionEndReceiveJsonData();
                callback(false, data);
            }
        });

        //Debug.Log(r);
    }