You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
233 lines
8.6 KiB
233 lines
8.6 KiB
using AX.Network.Protocols; |
|
using AX.NetworkSystem; |
|
using System.Collections; |
|
using System.Collections.Generic; |
|
using UnityEngine; |
|
using System; |
|
using AX.Serialization; |
|
|
|
public class CommandingCtrl : MonoBehaviour { |
|
|
|
private List<bool> isCommandbools = new List<bool>();//当前登陆用户所有上级的是否为总指挥值的集合 |
|
|
|
public GameObject PoliceInfo; |
|
|
|
// Use this for initialization |
|
void Start () { |
|
PoliceInfo = GameObject.Find("Canvas").transform.Find("Police/Main/PoliceInfo").gameObject; |
|
|
|
NetworkMessageDispatcher.AddListener("GET_SUP_ISCOMMAND_SYNC", GetSupIsCommand); |
|
|
|
NetworkMessageDispatcher.AddListener("ISCOMMAND_SYNC", SetSupIsCommand); |
|
|
|
NetworkMessageDispatcher.AddListener("EXIST_OTHER_DEPT_ISCMD_SYNC", ExistOtherDeptIsCMD); |
|
|
|
NetworkMessageDispatcher.AddListener("EXIST_OTHER_DEPT_ISCMD_RESP_SYNC", ExistOtherDeptIsCMDResp); |
|
|
|
NetworkMessageDispatcher.AddListener("EXIST_OTHER_EXCEPTZD_DEPT_ISCMD_SYNC", ExistOtherExceptZDDeptIsCMD); |
|
|
|
NetworkMessageDispatcher.AddListener("EXIST_OTHER_EXCEPTZD_DEPT_ISCMD_RESP_SYNC", ExistOtherExceptZDDeptIsCMDResp); |
|
|
|
} |
|
|
|
private void OnDestroy() |
|
{ |
|
NetworkMessageDispatcher.RemoveListener("GET_SUP_ISCOMMAND_SYNC", GetSupIsCommand); |
|
|
|
NetworkMessageDispatcher.RemoveListener("ISCOMMAND_SYNC", SetSupIsCommand); |
|
|
|
NetworkMessageDispatcher.RemoveListener("EXIST_OTHER_DEPT_ISCMD", ExistOtherDeptIsCMD); |
|
|
|
NetworkMessageDispatcher.RemoveListener("EXIST_OTHER_DEPT_ISCMD_RESP_SYNC", ExistOtherDeptIsCMDResp); |
|
|
|
NetworkMessageDispatcher.RemoveListener("EXIST_OTHER_EXCEPTZD_DEPT_ISCMD_SYNC", ExistOtherExceptZDDeptIsCMD); |
|
|
|
NetworkMessageDispatcher.RemoveListener("EXIST_OTHER_EXCEPTZD_DEPT_ISCMD_RESP_SYNC", ExistOtherExceptZDDeptIsCMDResp); |
|
} |
|
|
|
/// <summary> |
|
/// 不存在大队指挥,支队指挥,总队指挥为总指挥,是中队为总指挥 |
|
/// </summary> |
|
/// <param name="obj"></param> |
|
private void ExistOtherExceptZDDeptIsCMDResp(BinaryMessage obj) |
|
{ |
|
var data = obj.Body.Deserialize<KeyValuePair<long, IsComdDatas>>(); |
|
|
|
PoliceInfo.GetComponent<PoliceInfoMsgBind>().isExistCmdRoles.Add(data.Value.generalCommanding); |
|
|
|
if (PoliceInfo.GetComponent<PoliceInfoMsgBind>().isExistCmdRoles.Count != data.Value.count) |
|
{ |
|
return; |
|
} |
|
|
|
if (!PoliceInfo.GetComponent<PoliceInfoMsgBind>().isExistCmdRoles.Contains(true)) |
|
{//不存在大队指挥,支队指挥,总队指挥为总指挥,是中队为总指挥 |
|
if (CurrentUserInfo.organization.DisplayName == "龙泾中队") |
|
{//若登陆辖区中队 |
|
CurrentUserInfo.generalCommanding = true;//设置当前登陆用户为总指挥 |
|
|
|
foreach (UserData item in CurrentUserInfo.room.UserList) |
|
{ |
|
if (CurrentUserInfo.mySelf.Id != item.UserInfo.Id) |
|
{//不发给自己 |
|
NetworkManager.Default.SendAsync("GENERAL_COMMANDING_UPDATE_SYNC", item.UserInfo.Id); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 是否存在大队指挥,支队指挥,总队指挥为总指挥 |
|
/// </summary> |
|
/// <param name="obj"></param> |
|
private void ExistOtherExceptZDDeptIsCMD(BinaryMessage obj) |
|
{ |
|
var data = obj.Body.Deserialize<KeyValuePair<long, List<long>>>(); |
|
|
|
var isComdDatas = new IsComdDatas(); |
|
isComdDatas.generalCommanding = CurrentUserInfo.generalCommanding; |
|
isComdDatas.count = data.Value.Count; |
|
|
|
NetworkManager.Default.SendAsync("EXIST_OTHER_EXCEPTZD_DEPT_ISCMD_RESP_SYNC", |
|
new KeyValuePair<long, IsComdDatas>(data.Key, isComdDatas)); |
|
} |
|
|
|
/// <summary> |
|
/// 看看是否有组织机构已为总指挥的处理 |
|
/// </summary> |
|
/// <param name="obj"></param> |
|
private void ExistOtherDeptIsCMDResp(BinaryMessage obj) |
|
{ |
|
var data = obj.Body.Deserialize<KeyValuePair<long, IsComdDatas>>(); |
|
|
|
PoliceInfo.GetComponent<PoliceInfoMsgBind>().isExistCmdRoles.Add(data.Value.generalCommanding); |
|
|
|
if (PoliceInfo.GetComponent<PoliceInfoMsgBind>().isExistCmdRoles.Count != data.Value.count) |
|
{ |
|
return; |
|
} |
|
|
|
if (!PoliceInfo.GetComponent<PoliceInfoMsgBind>().isExistCmdRoles.Contains(true)) |
|
{ |
|
if (CurrentUserInfo.role == Role.总队指挥 |
|
|| CurrentUserInfo.role == Role.支队指挥 |
|
|| CurrentUserInfo.role == Role.大队指挥 |
|
|| CurrentUserInfo.role == Role.中队指挥) |
|
{ |
|
CurrentUserInfo.generalCommanding = true;//设置当前登陆用户为总指挥 |
|
} |
|
} |
|
else |
|
{//处理没有大队指挥,支队指挥,总队指挥为总指挥情况下,已有某中队为总指挥,辖区中队进入后,总指挥移交辖区中队 |
|
|
|
//是否存在大队指挥,支队指挥,总队指挥为总指挥 |
|
PoliceInfo.GetComponent<PoliceInfoMsgBind>().isExistCmdRoles = new List<bool>(); |
|
|
|
List<long> Uids = new List<long>(); |
|
foreach (UserData item in CurrentUserInfo.room.UserList) |
|
{ |
|
if ((item.Role == Role.总队指挥 |
|
|| item.Role == Role.支队指挥 |
|
|| item.Role == Role.大队指挥) |
|
&& item.UserInfo.Id != CurrentUserInfo.mySelf.Id |
|
) |
|
{ |
|
Uids.Add(item.UserInfo.Id); |
|
} |
|
} |
|
|
|
if (Uids.Count == 0) |
|
{//说明存在中队为总指挥 |
|
if (CurrentUserInfo.organization.DisplayName == "龙泾中队") |
|
{//若登陆辖区中队 |
|
CurrentUserInfo.generalCommanding = true;//设置当前登陆用户为总指挥 |
|
|
|
foreach (UserData item in CurrentUserInfo.room.UserList) |
|
{ |
|
if (CurrentUserInfo.mySelf.Id != item.UserInfo.Id) |
|
{//不发给自己 |
|
NetworkManager.Default.SendAsync("GENERAL_COMMANDING_UPDATE_SYNC", item.UserInfo.Id); |
|
} |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
//是否存在大队指挥,支队指挥,总队指挥为总指挥 |
|
NetworkManager.Default.SendAsync("EXIST_OTHER_EXCEPTZD_DEPT_ISCMD_SYNC", |
|
new KeyValuePair<long, List<long>>(CurrentUserInfo.mySelf.Id, Uids)); |
|
} |
|
|
|
} |
|
} |
|
|
|
public struct IsComdDatas |
|
{ |
|
public bool generalCommanding; |
|
public int count; |
|
} |
|
|
|
/// <summary> |
|
/// 看看是否有组织机构已为总指挥 |
|
/// </summary> |
|
/// <param name="obj"></param> |
|
private void ExistOtherDeptIsCMD(BinaryMessage obj) |
|
{ |
|
var data = obj.Body.Deserialize<KeyValuePair<long, List<long>>>(); |
|
|
|
var isComdDatas = new IsComdDatas(); |
|
isComdDatas.generalCommanding = CurrentUserInfo.generalCommanding; |
|
isComdDatas.count = data.Value.Count; |
|
|
|
NetworkManager.Default.SendAsync("EXIST_OTHER_DEPT_ISCMD_RESP_SYNC", |
|
new KeyValuePair<long, IsComdDatas>(data.Key, isComdDatas)); |
|
} |
|
|
|
private void GetSupIsCommand(BinaryMessage message) |
|
{ |
|
var data = message.Body.Deserialize<KeyValuePair<long, List<UserData>>>(); |
|
|
|
var isComdDatas = new IsComdDatas(); |
|
isComdDatas.generalCommanding = CurrentUserInfo.generalCommanding; |
|
isComdDatas.count = data.Value.Count; |
|
|
|
NetworkManager.Default.SendAsync("ISCOMMAND_SYNC", new KeyValuePair<long , IsComdDatas>(data.Key, isComdDatas)); |
|
} |
|
|
|
private void SetSupIsCommand(BinaryMessage message) |
|
{ |
|
var data = message.Body.Deserialize<KeyValuePair<long, IsComdDatas>>(); |
|
|
|
isCommandbools.Add(data.Value.generalCommanding); |
|
|
|
if (isCommandbools.Count != data.Value.count) |
|
{ |
|
return; |
|
} |
|
|
|
if (!isCommandbools.Contains(true)) |
|
{ |
|
CurrentUserInfo.generalCommanding = true; |
|
|
|
foreach (UserData item in CurrentUserInfo.room.UserList) |
|
{ |
|
if (CurrentUserInfo.mySelf.Id != item.UserInfo.Id) |
|
{ |
|
//通知当前登陆用户的下级移交总指挥(接收处理时设置CurrentUserInfo.generalCommanding为false) |
|
NetworkManager.Default.SendAsync("GENERAL_COMMANDING_UPDATE_SYNC", item.UserInfo.Id); |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
CurrentUserInfo.generalCommanding = false; |
|
} |
|
} |
|
|
|
// Update is called once per frame |
|
void Update () { |
|
|
|
} |
|
|
|
}
|
|
|