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"; /// /// 接口IP (配置文件) /// 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; } /// /// 初始化Netmq /// /// 接收函数 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 调接口 /// /// 调接口 /// /// /// /// /// public static IEnumerator CallPost(string url, KeyValuePair[] datas, Action 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().transform); } else { if (back != null) { back.Invoke(request.downloadHandler.text); } } } } /// /// 调接口 /// /// /// /// public static IEnumerator CallGet(string url, Action 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().transform); } else { if (back != null) { back.Invoke(request.downloadHandler.text); } } } } public static IEnumerator GetFile(string url,Action 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().transform); } else { if (back != null) { back.Invoke(request.downloadHandler.data); } } } } /// /// 调用web接口(PostUploadHandler) /// /// /// 数据 /// 回调 /// public static IEnumerator InvokeWebPostByUploadhandler(string url, string json, Action 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); } } /// /// 上传文件 /// /// /// /// /// /// public static IEnumerator UpLoadFile(string url,byte[] file,string fileName,Action 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().transform); back(new CallResultObject { state = false }); } else { if (back != null) { string str=request.downloadHandler.text; CallResultObject co= LitJson.JsonMapper.ToObject(str); back.Invoke(co); } } } else { back(new CallResultObject { state = false }); } } #endregion } /// /// 消息体 /// [Serializable] public struct st_Motions { /// /// 域 /// public string area; /// /// 消息标识 /// public int m_iOperaType; /// /// 消息内容(byte[256]) /// public byte[] m_sOperaData; } /// /// 演习状态 /// public enum ProgramState { 结束, 进行中 }