最近项目有客服系统的需求,任务分配到我头上,第一次写没什么经验,查阅了一天的资源,磕磕碰碰总算是写出来了,大概记录一下流程和思路。
首先访问web方法,一般都是用WWW类来访问。代码很简单。
using LuaInterface;
using System;
using System.Collections;
using System.Security.Cryptography;
using System.Text;
using UnityEngine;
public static class GMMessage
{
//发送post请求
public static void SendWWWPost(string url, WWWForm form, LuaFunction func)
{
Helper.mainLogicObj.GetComponent<FPS>().StartCoroutine(LoadWWWPost(url, form, func));
}
public static IEnumerator LoadWWWPost(string url, WWWForm form, LuaFunction func)
{
// Start a download of the given URL;
WWW www = new WWW(url, form);
// Wait for download to complete
yield return www;
func.Call(www);
}
}
这里我写了一个简单的接口,下面这行代码的是要用到协程,但如果不继承MonoBehaviour类就不使用协程,就算继承了,也要挂载到GameObject上才行,由于这个接口逻辑是和UI无关的,所以这里借用FPS脚本的协程
Helper.mainLogicObj.GetComponent<FPS>().StartCoroutine(LoadWWWPost(url, form, func));
具体的业务逻辑全部放在Lua里:
GMDataCenter = {}
local key = 'mokylin'
GMmsgType ={
Submit = 1, --表单提交
}
local urlList = {
add = 'http://cs.mokylin.com:8081/css/xyz/cssystem/add',
}
--提交GM工单
function GMDataCenter.SubmitForm(list)
--判断表单内容
if Helper.GetStringLength(list.content) < 20 then
HelperL.AddAMessageTip("内容不能少于20个字")
return
end
if Helper.GetStringLength(list.title) < 5 then
HelperL.AddAMessageTip("标题不能少于5个字")
return
end
local url = urlList["add"]
local signStr = list.agent_id..list.game_zone_id..list.time_stamp..list.user_account..list.user_id..key
local sign = Helper.getMD5Str(signStr)
local form = UnityEngine.WWWForm.New()
form:AddField("content", list.content);
form:AddField("money_total", list.money_total);
form:AddField("user_nickname", list.user_nickname);
form:AddField("question_type", list.question_type);
form:AddField("title", list.title);
form:AddField("vip", list.vip);
form:AddField("agent_id", list.agent_id);
form:AddField("game_zone_id", list.game_zone_id);
form:AddField("time_stamp", list.time_stamp);
form:AddField("user_account", list.user_account);
form:AddField("user_id", list.user_id);
form:AddField("sign", sign);
GMMessage.SendWWWPost(url,form,GMDataCenter.SubmitFormCallBack)
end
function GMDataCenter.SubmitFormCallBack(www)
if www ~= nil then
local content = json.decode(www.text)
if content == nil then print("content == nil") return end
if content.status ~= 1 then
print(content.status)
print(content.info)
HelperL.AddAMessageTip("提交失败,请检查网路")
return
end
local parm = {
msgType = GMmsgType.Submit,
desc = content.info,
}
HelperL.AddAMessageTip("发送成功")
EventManager.Fire(EventID.GMReturnMsgEvent, parm)
end
end
逻辑还是很简单的,如果真的要实现那种在线客服,及时通讯的效果,还是稍微复杂一些,以后实现了会持续更新。