using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using System.Collections.Concurrent; using System.Linq; using System.Diagnostics; using UnityEngine.Networking; using DataModel.Model; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; public class MyNetMQClient : MonoBehaviour { public static MyNetMQClient instance; [DisplayOnly] public string PubIP= "127.0.0.1:8082"; [DisplayOnly] public string SubIP = "127.0.0.1:8081"; /// <summary> /// 接口IP (配置文件) /// </summary> public static string CallIP = "192.168.0.103:8080"; public static string SyncServerIP = "192.168.0.103:8888"; public static string remoteServerIP = "192.168.0.103:8890"; public static string userIP = "192.168.0.102"; [HideInInspector] public NetMqListener _netMqListener; [HideInInspector] public NetMqPublisher _netMqPublisher; private void Awake() { instance = this; } /// <summary> /// 初始化Netmq /// </summary> /// <param name="reciveInMono">接收函数</param> public void Init(string ServerSubIP,string ServerPubIP,string area, NetMqListener.ReciveMessageInThread reciveInthread, NetMqListener.ReceiceMessageInMono reciveInMono,string typename) { SubIP = ServerSubIP; PubIP = ServerPubIP; //开启接收模块 _netMqListener = new NetMqListener(ServerSubIP, area, reciveInthread, reciveInMono); _netMqListener.typeName = typename; //开启发送模块 _netMqPublisher = new NetMqPublisher(ServerPubIP); _netMqPublisher.typeName = typename; } public void Send(string area,int type,byte[] data) { _netMqPublisher.AddMessageToSendQue(area, type, data); } public void Send(st_Motions st) { _netMqPublisher.AddMessageToSendQue(st); } private void Update() { if (_netMqListener != null) { _netMqListener.UpdateByte(); } //测试 //if(Input.GetKeyDown(KeyCode.Space)) //{ // Send(LoadManage.Instance.currentPractice.RoomArea, 1000, new byte[5]); //} } public void Destroy() { _netMqListener._listenerCancelled = true; _netMqPublisher._listenerCancelled = true; UnityEngine.Debug.Log("销毁xxxxx"); Destroy(this); } #region 调接口 /// <summary> /// 调接口 /// </summary> /// <param name="url"></param> /// <param name="datas"></param> /// <param name="back"></param> /// <returns></returns> public static IEnumerator CallPost(string url, KeyValuePair<string, string>[] datas, Action<string> back) { WWWForm form = new WWWForm(); for (int i = 0; i < datas.Length; i++) { form.AddField(datas[i].Key, datas[i].Value); } UnityWebRequest request = UnityWebRequest.Post(url, form); yield return request.SendWebRequest(); if (request.isDone) { if (request.isHttpError || request.isNetworkError) { MessagePanel.ShowMessage("接口异常,isHttpError"+ request.isHttpError+ ".isNetworkError"+ request.isNetworkError, GameObject.FindObjectOfType<Canvas>().transform); } else { if (back != null) { back.Invoke(request.downloadHandler.text); } } } } /// <summary> /// 调接口 /// </summary> /// <param name="url"></param> /// <param name="back"></param> /// <returns></returns> public static IEnumerator CallGet(string url, Action<string> back) { UnityWebRequest request =UnityWebRequest.Get(url); yield return request.SendWebRequest(); if (request.isDone) { if (request.isHttpError || request.isNetworkError) { MessagePanel.ShowMessage("接口异常+isHttpError"+ request.isHttpError+ ",isNetworkError"+ request.isNetworkError, GameObject.FindObjectOfType<Canvas>().transform); } else { if (back != null) { back.Invoke(request.downloadHandler.text); } } } } public static IEnumerator GetFile(string url,Action<byte[]> back) { UnityWebRequest request = UnityWebRequest.Get(url); yield return request.SendWebRequest(); if (request.isDone) { if (request.isHttpError || request.isNetworkError) { MessagePanel.ShowMessage("接口异常+isHttpError" + request.isHttpError + ",isNetworkError" + request.isNetworkError, GameObject.FindObjectOfType<Canvas>().transform); } else { if (back != null) { back.Invoke(request.downloadHandler.data); } } } } /// <summary> /// 调用web接口(PostUploadHandler) /// </summary> /// <param name="url"></param> /// <param name="json">数据</param> /// <param name="callback">回调</param> /// <returns></returns> public static IEnumerator InvokeWebPostByUploadhandler(string url, string json, Action<bool,string> callback) { byte[] uploadData = Encoding.UTF8.GetBytes(json); UnityWebRequest webRequest = new UnityWebRequest(url, "POST"); webRequest.SetRequestHeader("accept", "*/*"); webRequest.SetRequestHeader("contentType", "application/json"); webRequest.downloadHandler = new DownloadHandlerBuffer(); webRequest.uploadHandler = new UploadHandlerRaw(uploadData); yield return webRequest.SendWebRequest(); if (webRequest.isHttpError || webRequest.isNetworkError) { callback(false,webRequest.error); } else { callback(true,webRequest.downloadHandler.text); } } /// <summary> /// 上传文件 /// </summary> /// <param name="url"></param> /// <param name="file"></param> /// <param name="fileName"></param> /// <param name="back"></param> /// <returns></returns> public static IEnumerator UpLoadFile(string url,byte[] file,string fileName,Action<CallResultObject> back) { WWWForm form = new WWWForm(); form.AddField("action", "Add"); form.AddField("saveName", fileName); form.AddBinaryData("file", file); UnityWebRequest request = UnityWebRequest.Post(url, form); yield return request.SendWebRequest(); if (request.isDone) { if (request.isHttpError || request.isNetworkError) { MessagePanel.ShowMessage("接口异常,isHttpError" + request.isHttpError + ".isNetworkError" + request.isNetworkError, GameObject.FindObjectOfType<Canvas>().transform); back(new CallResultObject { state = false }); } else { if (back != null) { string str=request.downloadHandler.text; CallResultObject co= LitJson.JsonMapper.ToObject<CallResultObject>(str); back.Invoke(co); } } } else { back(new CallResultObject { state = false }); } } #endregion } /// <summary> /// 消息体 /// </summary> [Serializable] public struct st_Motions { /// <summary> /// 域 /// </summary> public string area; /// <summary> /// 消息标识 /// </summary> public int m_iOperaType; /// <summary> /// 消息内容(byte[256]) /// </summary> public byte[] m_sOperaData; } /// <summary> /// 演习状态 /// </summary> public enum ProgramState { 结束, 进行中 }