using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Net;
using System.Text;
using System.Linq;
public class SoftManage : MonoBehaviour
{
public static SoftManage Instance;
public string softName = "车控软件";
Dictionary<string, string> subjectDic = new Dictionary<string, string> {};
private Action<string, string> softAction;
/// <summary>
/// 配置文件 科目=软件&岗位,软件&岗位
/// </summary>
private Dictionary<string,List<string[]>> softseting;
//public List<MessageModel> Soft = new List<MessageModel>();//操作软件通信
private void Awake()
{
Instance = this;
subjectDic.Add("转载下车前准备", "3cbb773a-3cb3-43bb-9aa1-8e3bb00c8aeb");
subjectDic.Add("转载下车后撤收", "657e1b34-7a74-401d-a5e6-efcb0275e520");
subjectDic.Add("转载上车前准备", "672b234e-9eee-4de7-989b-3a1df41eb05e");
subjectDic.Add("转载上车后撤收", "1461f02f-d436-4e42-b8ca-6587c5c38f49");
//读配置文件
StartCoroutine(MyNetMQClient.CallGet("http://"+ MyNetMQClient.CallIP + "/3DConfig/SoftSetting.txt", str =>
{
var tmps=str.Split(new char[] {'\r','\n' }, StringSplitOptions.RemoveEmptyEntries).ToList();
var tmpdic =new Dictionary<string, List<string[]>>();
tmps.ForEach(a=>
{
string[] p=a.Split('=');
string[] datas=p[1].Split(',');
List<string[]> ruanjianlist = new List<string[]>();
for (int i = 0; i < datas.Length; i++)
{
ruanjianlist.Add(datas[i].Split('&'));
}
tmpdic.Add(p[0], ruanjianlist);
});
softseting = tmpdic;
}));
}
private void Start()
{
////连接仿真服务器
//ClientSocket.ConnectFangZhenSocekt(LoadManage.Instance.currentPractice.IpAddress, LoadManage.Instance.currentPractice.Port.Value, (a) =>
//{
// if (!a)
// {
// Debug.LogError("连接仿真服务器失败");
// MessagePanel.ShowMessage("连接仿真服务器失败", GameManage.Instance.canvas.transform, b => { });
// }
//});
}
private void Update()
{
//测试代码
//if (Input.GetKeyDown(KeyCode.Space))
//{
// LoadManage.Instance.currentPracticeSubejct = LoadManage.Instance.psubjects[0];
// LoadManage.Instance.currentPracticeSeat = LoadManage.Instance.myPracticeSeat.Find(a => a.PracticeSubjectId == LoadManage.Instance.currentPracticeSubejct.Id);
// StartSoft(LoadManage.Instance.currentPracticeSeat.PracticeId, LoadManage.Instance.currentPracticeSubejct.Name, LoadManage.Instance.currentPracticeSeat.SeatName, LoadManage.Instance.currentPracticeSeat.UserAccount, 0);
//}
//if (Soft.Any())
//{
// var tmps = Soft.GetRange(0, Soft.Count);
// tmps.ForEach(tmp =>
// {
// SoftHandle(tmp);
// });
// Soft.Clear();
//}
}
/// <summary>
/// 注册软件消息处理函数
/// </summary>
/// <param name="softAction">参数(消息内容,软件名)</param>
public void SetSoftAction(Action<string, string> softAction)
{
this.softAction += softAction;
}
/// <summary>
/// 二维软件消息处理
/// </summary>
public void SoftHandle(MessageModel message)
{
if (softAction != null)
{
softAction.Invoke(message.str, message.canShu.ToString());
}
}
/// <summary>
/// 是否自己执行
/// </summary>
/// <param name="softName"></param>
/// <returns></returns>
public bool CanHandle(string softName)
{
if (LoadManage.Instance.currentPracticeSubejct!=null && LoadManage.Instance.currentPracticeSeat!=null)
{
string subjectname = LoadManage.Instance.currentPracticeSubejct.Name;
string seatname=LoadManage.Instance.currentPracticeSeat.SeatName;
if (softseting.ContainsKey(subjectname))
{
if (softseting[subjectname].Any(a => a[0] == softName && a[1] == seatname))
{
return true;
}
}
}
return false;
}
private void OnDestroy()
{
softAction = null;
ClientSocket.CloseFangZhenSocket();
}
/// <summary>
/// 启动二维软件 (故障课目为1,非故障为0)
/// </summary>
public void StartSoft(string pratcieId, string subjectName, string seatName, string userAccount, int isGuZhang)
{
//是否开启软件
if(softseting.ContainsKey(subjectName) && softseting[subjectName].Any(a=>a[0]==softName && a[1]==seatName))
{
if (subjectDic.ContainsKey(subjectName))
{
string subjectId = subjectDic[subjectName];
Debug.Log("启动二维软件");
string arguments = string.Format("{0};{1};{2};{3};{4};{5};{6};{7}", pratcieId, subjectId, seatName, userAccount, LoadManage.Instance.currentPractice.IpAddress, LoadManage.Instance.currentPractice.Port, isGuZhang, "none:no");
byte[] arg = Encoding.UTF8.GetBytes(arguments);
byte[] data = new byte[8 + arg.Length];
//type
Array.Copy(BitConverter.GetBytes(20), 0, data, 0, 4);
//参数
Array.Copy(BitConverter.GetBytes(arg.Length), 0, data, 4, 4);
Array.Copy(arg, 0, data, 8, arg.Length);
//UDP远程启动
LoadManage.Instance.UdpSend(data, new IPEndPoint(IPAddress.Parse(MyNetMQClient.remoteServerIP.Split(':')[0]), int.Parse(MyNetMQClient.remoteServerIP.Split(':')[1])));
}
}
}
/// <summary>
/// 远程切换科目
/// </summary>
public void ChangeSoftSubject(string practiceId, string subjectName, string softName, string seatName, string userAccount)
{
if (subjectDic.ContainsKey(subjectName))
{
string subejctId = subjectDic[subjectName];
MessageModel messageModel = new MessageModel(SimOperationEnum.操作软件三维端);
messageModel.str = string.Format("{0}|{1}|{2}|{3}|{4}", "切换科目", practiceId, subejctId, seatName, userAccount);
messageModel.str2 = MyNetMQClient.remoteServerIP.Split(':')[0];
messageModel.canShu = softName;
// ClientSocket.SendToTongBuFangZhenServer(messageModel);
string msg=LitJson.JsonMapper.ToJson(messageModel);
byte[] msgbytes=Encoding.UTF8.GetBytes(msg);
byte[] tmps = new byte[4+msgbytes.Length];
Array.Copy(BitConverter.GetBytes(msg.Length), 0, tmps, 0, 4);
Array.Copy(msgbytes, 0, tmps, 4, msgbytes.Length);
MyNetMQClient.instance.Send(LoadManage.Instance.currentRoomArea, 22, tmps);
Debug.Log("切换二维软件科目:" + subjectName);
}
else
{
Debug.LogError("不存在此二维科目");
}
}
}