C#代碼:
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
using System;
public class Mains : MonoBehaviour {
public void Start()
{
string id = "5845695";
string birth = "19980608";
string sex = "girl";
StartCoroutine(GetDestiny(id, birth, sex, ()=> {
Debug.Log("What Will Happens!");
}));
}
IEnumerator GetDestiny(string _id, string _birth, string _sex, Action _action)
{
string url = "https://get_your_destiny/love";
WWWForm form = new WWWForm();
form.AddField("id", _id);
form.AddField("birth", _birth);
form.AddField("sex", _sex);
UnityWebRequest request = UnityWebRequest.Post(url, form);
request.timeout = 10;
yield return request.SendWebRequest();
string server_data = request.downloadHandler.text;
if(request.error != null)
{
//repeat again
StartCoroutine(GetDestiny(_id, _birth, _sex, _action));
}
else if(server_data == "lucky")
{
Debug.Log("I am SO lucky!");
}
else
{
if(_action != null)
{
_action();
}
}
}
}
xlua重寫的方法
local util = require "util"
xlua.hotfix(CS.XluaManager, 'check_xlua_base', function(self)
print('check_xlua_base')
end)
xlua.hotfix(CS.XluaManager, 'check_xlua_IEnumerator',function(self)
return util.cs_generator(function()
print('check_xlua_IEnumerator')
end)
end)
xlua.hotfix(CS.XluaManager, 'check_xlua_bool', function(self,action)
print('check_xlua_bool')
end)
xlua.hotfix(CS.login_gui, 'isMatchRealName', function(name)
print("===============isMatchRealName");
local reg = "^[\\u4e00-\\u9fa5\\uf900-\\ufa2d][\\u4e00-\\u9fa5\\uf900-\\ufa2d·]+$";
local result = CS.System.Text.RegularExpressions.Regex.IsMatch(name, reg);
return result;
end)
--"=============================================================實現上面C#方法=============================="
--"實現'Start'方法"
xlua.hotfix(CS.Mains, 'Start', function(self)
local id = "5845695";
local birth = "19980608";
local sex = "girl";
self:StartCoroutine(self:GetDestiny(id, birth, sex, function(self)
CS.UnityEngine.Debug.Log("What Will Happens!");
end));
end)
--"實現'GetDestiny'協程方法"
xlua.hotfix(CS.Mains, 'GetDestiny', function(self, _id, _birth, _sex, _action)
local url = "https://get_your_destiny/love";
//"把yield寫在這裏面"
return util.cs_generator(function()
local form = CS.UnityEngine.WWWForm();
form:AddField("id", _id);
form:AddField("birth", _birth);
form:AddField("sex", _sex);
local request = CS.UnityEngine.Networking.UnityWebRequest.Post(url, form);
request.timeout = 10;
--"此句實現yield"
coroutine.yield(request:SendWebRequest());
local serverData = request.downloadHandler.text;
CS.UnityEngine.Debug.Log("========serverData: " .. serverData);
if (request.error ~= nil) then
CS.UnityEngine.Debug.LogError("request error: " .. request.error)
//repeat again
self:StartCoroutine(self:GetDestiny(_id, _birth, _sex, _action));
elseif(serverData == "lucky") then
CS.UnityEngine.Debug.Log("I am SO lucky!");
else
if(_action ~= null) then
_action();
end
end
end)
end)
--"不直接重寫方法,而是在原有方法的基礎上,繼續執行語句"
util.hotfix_ex(CS.Mains, 'GetDestiny', function(self, _id, _birth, _sex, _action)
--"先執行方法"
self:StartCoroutine(self:GetDestiny(_id, _birth, _sex, _action));
--"繼續執行語句"
print("====================cctv");
end)