ssssss
This commit is contained in:
parent
e29060cbfe
commit
1f491565a4
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 9545db1eb965bdd43bc46c5ec1e51840
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEditor;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
[CustomPropertyDrawer(typeof(DisplayOnly))]
|
||||||
|
public class ReadOnlyDrawer : PropertyDrawer
|
||||||
|
{
|
||||||
|
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
|
||||||
|
{
|
||||||
|
return EditorGUI.GetPropertyHeight(property, label, true);
|
||||||
|
}
|
||||||
|
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
||||||
|
{
|
||||||
|
GUI.enabled = false;
|
||||||
|
EditorGUI.PropertyField(position, property, label, true);
|
||||||
|
GUI.enabled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 99f3249895fe4ff42bd3c50526a67ff4
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -1 +1 @@
|
||||||
127.0.0.1:48888
|
172.16.1.254:48888
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
serverIP=172.16.1.154
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 286a995b4682ee24e898f1a251081a8e
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -225,6 +225,7 @@ GameObject:
|
||||||
- component: {fileID: 2132962759}
|
- component: {fileID: 2132962759}
|
||||||
- component: {fileID: 2132962760}
|
- component: {fileID: 2132962760}
|
||||||
- component: {fileID: 2132962758}
|
- component: {fileID: 2132962758}
|
||||||
|
- component: {fileID: 2132962761}
|
||||||
m_Layer: 0
|
m_Layer: 0
|
||||||
m_Name: Net
|
m_Name: Net
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
|
|
@ -274,3 +275,17 @@ MonoBehaviour:
|
||||||
m_Script: {fileID: 11500000, guid: 7849c2de1b8e12e478bd7b1e0af1e553, type: 3}
|
m_Script: {fileID: 11500000, guid: 7849c2de1b8e12e478bd7b1e0af1e553, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
|
--- !u!114 &2132962761
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2132962757}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 8f4de7d1cb6612d42ba96f515d29e3d5, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
PubIP: 127.0.0.1:8082
|
||||||
|
SubIP: 127.0.0.1:8081
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 94b32ba3a20dc8443b0e53007662dbc8
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -0,0 +1,261 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.SceneManagement;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Collections;
|
||||||
|
using System.IO;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
public class LoadManage : MonoBehaviour
|
||||||
|
{
|
||||||
|
public static LoadManage Instance;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 房间域 "Room"
|
||||||
|
/// </summary>
|
||||||
|
[DisplayOnly]
|
||||||
|
public string currentRoomArea;
|
||||||
|
/// <summary>
|
||||||
|
/// 训练状态
|
||||||
|
/// </summary>
|
||||||
|
public static ProgramState programState = ProgramState.结束;
|
||||||
|
/// <summary>
|
||||||
|
/// 是否暂停
|
||||||
|
/// </summary>
|
||||||
|
public static bool isPause;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 与RoomServer通信
|
||||||
|
/// </summary>
|
||||||
|
[DisplayOnly]
|
||||||
|
public MyNetMQClient RSclient;
|
||||||
|
|
||||||
|
|
||||||
|
public static Action<string> registRequset;
|
||||||
|
public static Action<string> getusersRequset;
|
||||||
|
public static Action<string> createRoomRequset;
|
||||||
|
public static Action<string> getRoomsRequset;
|
||||||
|
public static Action<string> getownRoomsRequset;
|
||||||
|
public static Action<string> joinRoomRequset;
|
||||||
|
public static Action<string> joinsRequset;
|
||||||
|
public static Action<string> leaveRoomRequset;
|
||||||
|
public static Action<string> closeRoomRequset;
|
||||||
|
public static Action<ulong, string, string> playerInfoRequset;
|
||||||
|
public static Action<string> getroomusersRequset;
|
||||||
|
public static Action<string> send2roomRequset;
|
||||||
|
public static Action<string> send2userRequset;
|
||||||
|
public static Action<string> send2worldRequset;
|
||||||
|
|
||||||
|
|
||||||
|
private void Awake()
|
||||||
|
{
|
||||||
|
Instance = this;
|
||||||
|
DontDestroyOnLoad(gameObject);
|
||||||
|
|
||||||
|
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
UnityEngine.Debug.unityLogger.logEnabled = true;
|
||||||
|
#else
|
||||||
|
UnityEngine.Debug.unityLogger.logEnabled = false;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
void Start()
|
||||||
|
{
|
||||||
|
//设置不休眠
|
||||||
|
Screen.sleepTimeout = SleepTimeout.NeverSleep;
|
||||||
|
string ip = "";
|
||||||
|
//配置
|
||||||
|
File.ReadAllLines(Application.streamingAssetsPath + "/MainSetting.txt").ToList().ForEach(line =>
|
||||||
|
{
|
||||||
|
if(line.Trim(' ').StartsWith("serverIP="))
|
||||||
|
{
|
||||||
|
string[] tmps = line.Trim(' ').Split('=');
|
||||||
|
ip= tmps[1];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
CreateRoomServerClient(string.Format("tcp://{0}:8889",ip), string.Format("tcp://{0}:8888",ip));
|
||||||
|
MyNetMQClient.instance._netMqListener.SubTopic("Room");
|
||||||
|
SceneManager.LoadScene("SampleScene");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 创建与roomServer通信的客户端
|
||||||
|
/// </summary>
|
||||||
|
public void CreateRoomServerClient(string roomServerSubIP, string roomServerPubIP)
|
||||||
|
{
|
||||||
|
if (RSclient == null)
|
||||||
|
{
|
||||||
|
//测试
|
||||||
|
//roomServerPubIP = "tcp://192.168.1.125:56987";
|
||||||
|
// roomServerSubIP = "tcp://192.168.1.125:56991";
|
||||||
|
RSclient = gameObject.AddComponent<MyNetMQClient>();
|
||||||
|
RSclient.Init(roomServerPubIP, roomServerSubIP, ReciveFromRoomServerInThread, ReciveFromRoomServerInMono, "roomServer");
|
||||||
|
Debug.Log("开启roomServer:" + roomServerPubIP + "------" + roomServerSubIP);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RemoveRoomServerClient()
|
||||||
|
{
|
||||||
|
if (RSclient != null)
|
||||||
|
{
|
||||||
|
RSclient.Destroy();
|
||||||
|
// RSclient = null;
|
||||||
|
Debug.Log("RSclient置空");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// RoomServer,mono
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="stS"></param>
|
||||||
|
private void ReciveFromRoomServerInThread(st_Motions stS)
|
||||||
|
{
|
||||||
|
if (stS.area == "Room")
|
||||||
|
{
|
||||||
|
//同步消息
|
||||||
|
//if (programState == ProgramState.进行中)
|
||||||
|
//{
|
||||||
|
// if (stS.m_iOperaType == 10006)
|
||||||
|
// {
|
||||||
|
// //单值同步
|
||||||
|
// int syncid = BitConverter.ToInt32(stS.m_sOperaData, 0);
|
||||||
|
// if (LoadManage.Instance.me.SyncId != syncid)
|
||||||
|
// {
|
||||||
|
// int legth = BitConverter.ToInt32(stS.m_sOperaData, 4);
|
||||||
|
// string id = Encoding.UTF8.GetString(stS.m_sOperaData, 8, legth);
|
||||||
|
// if (OneValueSyncObject.OneAxisSyncObjectList.ContainsKey(id))
|
||||||
|
// {
|
||||||
|
// if (stS.m_sOperaData[9 + legth] == 0)
|
||||||
|
// {
|
||||||
|
// //无回调
|
||||||
|
// OneValueSyncObject.OneAxisSyncObjectList[id].SetValue(8 + legth, stS.m_sOperaData);
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// //有回调
|
||||||
|
// RSclient._netMqListener.AddToMono(stS);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// else if (stS.m_iOperaType == 10007)
|
||||||
|
// {
|
||||||
|
// //坐标角度同步
|
||||||
|
// int syncid = BitConverter.ToInt32(stS.m_sOperaData, 0);
|
||||||
|
// if (LoadManage.Instance.me.SyncId != syncid)
|
||||||
|
// {
|
||||||
|
// int legth = BitConverter.ToInt32(stS.m_sOperaData, 4);
|
||||||
|
// string id = Encoding.UTF8.GetString(stS.m_sOperaData, 8, legth);
|
||||||
|
// if (FunctionSync_PositionRoate.positionRoateSyncObejctList.ContainsKey(id))
|
||||||
|
// {
|
||||||
|
// FunctionSync_PositionRoate.positionRoateSyncObejctList[id].SetValue(8 + legth, stS.m_sOperaData);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// else if (stS.m_iOperaType == 61)
|
||||||
|
// {
|
||||||
|
// //心跳检测
|
||||||
|
// //XinTiaoCheck();
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// RSclient._netMqListener.AddToMono(stS);
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
else if(stS.area == "System")
|
||||||
|
{
|
||||||
|
//系统消息
|
||||||
|
RSclient._netMqListener.AddToMono(stS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// RoomServer,mono
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="data"></param>
|
||||||
|
public void ReciveFromRoomServerInMono(st_Motions stS)
|
||||||
|
{
|
||||||
|
|
||||||
|
#if !UNITY_EDITOR
|
||||||
|
try
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
string message = Encoding.UTF8.GetString(stS.m_sOperaData);
|
||||||
|
string[] commands = message.Split(' ');
|
||||||
|
|
||||||
|
if (commands.Length > 0)
|
||||||
|
{
|
||||||
|
//Debug.Log($"<color=green>commands[0]===={commands[0]}</color>");
|
||||||
|
switch (commands[0])
|
||||||
|
{
|
||||||
|
case "regist":
|
||||||
|
registRequset?.Invoke(commands[1]);
|
||||||
|
break;
|
||||||
|
case "getusers":
|
||||||
|
getusersRequset?.Invoke(commands[1]);
|
||||||
|
break;
|
||||||
|
case "createroom":
|
||||||
|
createRoomRequset?.Invoke(commands[1]);
|
||||||
|
break;
|
||||||
|
case "getrooms":
|
||||||
|
getRoomsRequset?.Invoke(commands[1]);
|
||||||
|
break;
|
||||||
|
case "getownrooms":
|
||||||
|
getownRoomsRequset?.Invoke(commands[1]);
|
||||||
|
break;
|
||||||
|
case "joinroom":
|
||||||
|
joinRoomRequset?.Invoke(commands[1]);
|
||||||
|
break;
|
||||||
|
case "joins":
|
||||||
|
joinsRequset?.Invoke(commands[1]);
|
||||||
|
break;
|
||||||
|
case "leaveroom":
|
||||||
|
leaveRoomRequset?.Invoke(commands[1]);
|
||||||
|
break;
|
||||||
|
case "closeroom":
|
||||||
|
closeRoomRequset?.Invoke(commands[1]);
|
||||||
|
break;
|
||||||
|
case "player":
|
||||||
|
string[] data = commands[1].Split(';');
|
||||||
|
if (data.Length == 3)
|
||||||
|
{
|
||||||
|
playerInfoRequset?.Invoke(ulong.Parse(data[0]), data[1], data[2]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "getroomusers":
|
||||||
|
getroomusersRequset?.Invoke(commands[1]);
|
||||||
|
break;
|
||||||
|
case "send2room":
|
||||||
|
send2roomRequset?.Invoke(commands[1]);
|
||||||
|
break;
|
||||||
|
case "send2user":
|
||||||
|
send2userRequset?.Invoke(commands[1]);
|
||||||
|
break;
|
||||||
|
case "send2world":
|
||||||
|
send2worldRequset?.Invoke(commands[1]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !UNITY_EDITOR
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Debug.LogError(e.Message);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDestroy()
|
||||||
|
{
|
||||||
|
Debug.Log("OnDestroy");
|
||||||
|
if (RSclient != null)
|
||||||
|
{
|
||||||
|
RSclient.Destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 5557d4b6fd90bcc489289539bebe43b0
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -0,0 +1,119 @@
|
||||||
|
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 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.1.161:8080";
|
||||||
|
public static string SyncServerIP = "192.168.1.161:8888";
|
||||||
|
public static string remoteServerIP = "192.168.1.161:8890";
|
||||||
|
|
||||||
|
[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, NetMqListener.ReciveMessageInThread reciveInthread, NetMqListener.ReceiceMessageInMono reciveInMono,string typename)
|
||||||
|
{
|
||||||
|
SubIP = ServerSubIP;
|
||||||
|
PubIP = ServerPubIP;
|
||||||
|
//开启接收模块
|
||||||
|
_netMqListener = new NetMqListener(ServerSubIP, 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Destroy()
|
||||||
|
{
|
||||||
|
_netMqListener._listenerCancelled = true;
|
||||||
|
_netMqPublisher._listenerCancelled = true;
|
||||||
|
UnityEngine.Debug.Log("销毁xxxxx");
|
||||||
|
Destroy(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 消息体
|
||||||
|
/// </summary>
|
||||||
|
[Serializable]
|
||||||
|
public class 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
|
||||||
|
{
|
||||||
|
结束,
|
||||||
|
进行中
|
||||||
|
}
|
||||||
|
|
||||||
|
public class DisplayOnly : PropertyAttribute
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8f4de7d1cb6612d42ba96f515d29e3d5
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -0,0 +1,148 @@
|
||||||
|
using NetMQ;
|
||||||
|
using NetMQ.Sockets;
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 订阅模块
|
||||||
|
/// </summary>
|
||||||
|
public class NetMqListener
|
||||||
|
{
|
||||||
|
private string serverSubIP;
|
||||||
|
|
||||||
|
private Thread _listenerWorker;
|
||||||
|
public bool _listenerCancelled;
|
||||||
|
/// <summary>
|
||||||
|
/// 自定义名称
|
||||||
|
/// </summary>
|
||||||
|
public string typeName;
|
||||||
|
/// <summary>
|
||||||
|
/// 处理函数委托
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="st"></param>
|
||||||
|
public delegate void ReceiceMessageInMono(st_Motions st);
|
||||||
|
public delegate void ReciveMessageInThread(st_Motions st);
|
||||||
|
/// <summary>
|
||||||
|
/// mono里处理消息
|
||||||
|
/// </summary>
|
||||||
|
private readonly ReceiceMessageInMono _reciveMessageInMono;
|
||||||
|
/// <summary>
|
||||||
|
/// 线程里处理模型
|
||||||
|
/// </summary>
|
||||||
|
private readonly ReciveMessageInThread _reciveMessageInThread;
|
||||||
|
|
||||||
|
private readonly List<st_Motions> _messageReciveStmotion = new List<st_Motions>();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 注册委托函数
|
||||||
|
/// </summary>
|
||||||
|
public NetMqListener(string subIP , ReciveMessageInThread _reciveInThread, ReceiceMessageInMono reciveInMono)
|
||||||
|
{
|
||||||
|
serverSubIP = subIP;
|
||||||
|
_reciveMessageInThread += _reciveInThread;
|
||||||
|
_reciveMessageInMono += reciveInMono;
|
||||||
|
StartListen();
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 开始监听
|
||||||
|
/// </summary>
|
||||||
|
public void StartListen()
|
||||||
|
{
|
||||||
|
_listenerCancelled = false;
|
||||||
|
_listenerWorker = new Thread(ByteListenerWork);
|
||||||
|
_listenerWorker.IsBackground = true;
|
||||||
|
_listenerWorker.Start();
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 停止监听
|
||||||
|
/// </summary>
|
||||||
|
public void StopListen()
|
||||||
|
{
|
||||||
|
_listenerCancelled = true;
|
||||||
|
//_listenerWorker.Join();
|
||||||
|
}
|
||||||
|
|
||||||
|
public SubscriberSocket subSocket;
|
||||||
|
/// <summary>
|
||||||
|
/// 接收线程
|
||||||
|
/// </summary>
|
||||||
|
private void ByteListenerWork()
|
||||||
|
{
|
||||||
|
AsyncIO.ForceDotNet.Force();
|
||||||
|
using (subSocket = new SubscriberSocket())
|
||||||
|
{
|
||||||
|
subSocket.Options.ReceiveHighWatermark = 1000;
|
||||||
|
subSocket.Connect(serverSubIP);
|
||||||
|
UnityEngine.Debug.Log("客户端开启成功:" + serverSubIP);
|
||||||
|
|
||||||
|
while (!_listenerCancelled)
|
||||||
|
{
|
||||||
|
//try
|
||||||
|
//{
|
||||||
|
List<byte[]> frameByte = new List<byte[]>();
|
||||||
|
if (!subSocket.TryReceiveMultipartBytes(ref frameByte)) continue;
|
||||||
|
//UnityEngine.Debug.Log("线程收到一条");
|
||||||
|
st_Motions stS = new st_Motions();
|
||||||
|
string tmp = Encoding.UTF8.GetString(frameByte[0]);
|
||||||
|
stS.m_iOperaType = BitConverter.ToInt32(frameByte[1], 0);
|
||||||
|
stS.m_sOperaData = new byte[frameByte[1].Length - 4];
|
||||||
|
stS.area = tmp;
|
||||||
|
Array.Copy(frameByte[1], 4, stS.m_sOperaData, 0, frameByte[1].Length - 4);
|
||||||
|
|
||||||
|
_reciveMessageInThread(stS);
|
||||||
|
//}
|
||||||
|
//catch (Exception e)
|
||||||
|
//{
|
||||||
|
// UnityEngine.Debug.LogError(_listenerCancelled+"------------" + e.Message);
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
subSocket.Close();
|
||||||
|
}
|
||||||
|
NetMQConfig.Cleanup();
|
||||||
|
UnityEngine.Debug.LogError("接收线程退出:"+typeName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SubTopic(string topic)
|
||||||
|
{
|
||||||
|
subSocket.Subscribe(topic);
|
||||||
|
}
|
||||||
|
public void UnSubtopic(string topic)
|
||||||
|
{
|
||||||
|
subSocket.Unsubscribe(topic);
|
||||||
|
}
|
||||||
|
public void AddToMono(st_Motions st)
|
||||||
|
{
|
||||||
|
_messageReciveStmotion.Add(st);
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 处理一条byte[]消息
|
||||||
|
/// </summary>
|
||||||
|
public void UpdateByte()
|
||||||
|
{
|
||||||
|
if (_messageReciveStmotion.Count > 0)
|
||||||
|
{
|
||||||
|
List<st_Motions> tmps = _messageReciveStmotion.GetRange(0, _messageReciveStmotion.Count);
|
||||||
|
tmps.ForEach(data =>
|
||||||
|
{
|
||||||
|
if (data.m_sOperaData != null)
|
||||||
|
{
|
||||||
|
_reciveMessageInMono(data);
|
||||||
|
UnityEngine.Debug.Log("处理:" + data.m_iOperaType + "st_motion" + "------" + data.m_sOperaData.Length);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UnityEngine.Debug.LogError(data.m_iOperaType + "st_motion结构错误");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
_messageReciveStmotion.RemoveRange(0, tmps.Count);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 67ea4fb5081b61448a20cc379671fb8a
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -0,0 +1,107 @@
|
||||||
|
using NetMQ;
|
||||||
|
using NetMQ.Sockets;
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 发布模块
|
||||||
|
/// </summary>
|
||||||
|
public class NetMqPublisher
|
||||||
|
{
|
||||||
|
private string serverPubIP;
|
||||||
|
|
||||||
|
private Thread _listenerWorker;
|
||||||
|
public bool _listenerCancelled;
|
||||||
|
/// <summary>
|
||||||
|
/// 自定义名称
|
||||||
|
/// </summary>
|
||||||
|
public string typeName;
|
||||||
|
public delegate void MessageDelegateByte(st_Motions st);
|
||||||
|
private readonly MessageDelegateByte _messageDelegateByte;
|
||||||
|
/// <summary>
|
||||||
|
/// 发送队列
|
||||||
|
/// </summary>
|
||||||
|
private readonly ConcurrentQueue<st_Motions> _messageQueueData = new ConcurrentQueue<st_Motions>();
|
||||||
|
|
||||||
|
|
||||||
|
public NetMqPublisher(string pubIP)
|
||||||
|
{
|
||||||
|
serverPubIP = pubIP;
|
||||||
|
StartListen();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 开始监听
|
||||||
|
/// </summary>
|
||||||
|
public void StartListen()
|
||||||
|
{
|
||||||
|
_listenerCancelled = false;
|
||||||
|
_listenerWorker = new Thread(ByteListenerWork);
|
||||||
|
_listenerWorker.IsBackground = true;
|
||||||
|
_listenerWorker.Start();
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 停止监听
|
||||||
|
/// </summary>
|
||||||
|
public void StopListen()
|
||||||
|
{
|
||||||
|
_listenerCancelled = true;
|
||||||
|
//_listenerWorker.Join();
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 发送线程
|
||||||
|
/// </summary>
|
||||||
|
private void ByteListenerWork()
|
||||||
|
{
|
||||||
|
AsyncIO.ForceDotNet.Force();
|
||||||
|
using (var publishSocket = new PublisherSocket())
|
||||||
|
{
|
||||||
|
publishSocket.Options.ReceiveHighWatermark = 1000;
|
||||||
|
publishSocket.Connect(serverPubIP);
|
||||||
|
UnityEngine.Debug.Log("客户端开启成功:"+ serverPubIP);
|
||||||
|
|
||||||
|
while (!_listenerCancelled)
|
||||||
|
{
|
||||||
|
if (!_messageQueueData.IsEmpty)
|
||||||
|
{
|
||||||
|
if (_messageQueueData.TryDequeue(out st_Motions sendData))
|
||||||
|
{
|
||||||
|
if(_listenerCancelled)
|
||||||
|
{
|
||||||
|
UnityEngine.Debug.LogError("_listenerCancelled="+true);
|
||||||
|
}
|
||||||
|
byte[] tmpbytes = new byte[4 + sendData.m_sOperaData.Length];
|
||||||
|
Array.Copy(BitConverter.GetBytes(sendData.m_iOperaType), 0, tmpbytes, 0, 4);
|
||||||
|
Array.Copy(sendData.m_sOperaData, 0, tmpbytes, 4, sendData.m_sOperaData.Length);
|
||||||
|
if (!_listenerCancelled && !publishSocket.SendMoreFrame(sendData.area).TrySendFrame(tmpbytes)) continue;
|
||||||
|
UnityEngine.Debug.Log("发送一个消息:" + sendData.area + "," + sendData.m_iOperaType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
publishSocket.Close();
|
||||||
|
}
|
||||||
|
NetMQConfig.Cleanup();
|
||||||
|
UnityEngine.Debug.LogError("发送线程退出:"+typeName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddMessageToSendQue(string area, int type, byte[] data)
|
||||||
|
{
|
||||||
|
st_Motions sendData = new st_Motions { area = area, m_iOperaType = type, m_sOperaData = data };
|
||||||
|
_messageQueueData.Enqueue(sendData);
|
||||||
|
}
|
||||||
|
public void AddMessageToSendQue(st_Motions st)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(st.area))
|
||||||
|
{
|
||||||
|
_messageQueueData.Enqueue(st);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UnityEngine.Debug.LogError("area空:type=" + st.m_iOperaType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 19c40638d96bbd046a36c1d565530554
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -187,8 +187,3 @@ public class AuthReq
|
||||||
public string userCode;
|
public string userCode;
|
||||||
public string userName;
|
public string userName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class DisplayOnly : PropertyAttribute
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue