// Use this for initialization void Start() { ChatCanvas.enabled = false; RealChannelName rn = new RealChannelName(); rn.userName = "******"; rn.channelName = GameChannels[0]; RealChannelsNames.Add(rn); RefreshChannelsList(); if (NetworkManager == null && GameObject.Find("NetworkManager") != null) { NetworkManager = GameObject.Find("NetworkManager").GetComponent <MyNetworkManager> (); } if (MessageNotifyComponent == null && GameObject.Find("MessageNotify-Canvas") != null) { MessageNotifyComponent = GameObject.Find("MessageNotify-Canvas").GetComponent <MessageNotify> (); } if (POPUPWindowComponent == null && GameObject.Find("POPUP-Canvas") != null) { POPUPWindowComponent = GameObject.Find("POPUP-Canvas").GetComponent <MainMenuPOPUP> (); } }
public void PrintChatMessage(string sender, string message) { GameObject ChatTextOb = Instantiate(ChatMessagePrefab); string[] msgs = message.Split(new string[] { "[_nickname]", "[_target]" }, StringSplitOptions.RemoveEmptyEntries); string senderName = ""; if (msgs.Length > 1) { senderName = msgs [1] + ": "; } ChatTextOb.GetComponent <Text> ().text = "<color=#00ffffff>" + senderName + "</color>" + msgs[0]; if (!ChatCanvas.enabled) { if (MessageNotifyComponent == null && GameObject.Find("MessageNotify-Canvas") != null) { MessageNotifyComponent = GameObject.Find("MessageNotify-Canvas").GetComponent <MessageNotify> (); } if (MessageNotifyComponent != null) { MessageNotifyComponent.ShowNotifyMessage(senderName + msgs [0]); if (MessageNotifyComponent.Btn != null) { MessageNotifyComponent.Btn.onClick.RemoveAllListeners(); MessageNotifyComponent.Btn.onClick.AddListener(MessageNotifyComponent.HideNotify); if (sender.Length > 0) { MessageNotifyComponent.Btn.onClick.AddListener(ShowChat); } } } } Canvas.ForceUpdateCanvases(); ChatTextOb.transform.SetParent(ChatMessagesTable, false); scrollRect.verticalScrollbar.value = 0f; ChatMessagesTable.GetComponent <VerticalLayoutGroup> ().padding.top = 18; Canvas.ForceUpdateCanvases(); scrollRect.verticalNormalizedPosition = 0f;; Canvas.ForceUpdateCanvases(); }
/// <summary> /// 消息解析 /// </summary> /// <param name="id">消息ID</param> /// <param name="message">消息内容</param> /// <param name="client">客户端(服务端使用时写)</param> public void AnalyseMsg(string id, string message, ModClient client) { //判断ID是否存在 if (!m_strUnProcessMsg.ContainsKey(id)) { m_strUnProcessMsg.Add(id, ""); } //分解消息 string[] msgs = (m_strUnProcessMsg[id] + message).Split(new string[] { "[_" }, StringSplitOptions.RemoveEmptyEntries); //清空未处理消息 m_strUnProcessMsg[id] = ""; for (int i = 0; i < msgs.Length; i++) { msgs[i] = "[_" + msgs[i]; } for (int i = 0; i < msgs.Length; i++) { //不完整消息 if (!msgs[i].EndsWith("_]")) { //判断是否为最后一组 if (i == msgs.Length - 1) { //等下次再处理 m_strUnProcessMsg[id] = msgs[i]; } else { MessageNotify?.Invoke(new ModSwapMessage(ESwapMsgType.BadMessage, msgs[i], client)); } break; } //普通消息 if (msgs[i].StartsWith(ISMessage.MsgNormalStart) && msgs[i].EndsWith(ISMessage.MsgNormalEnd)) { string revMsg = msgs[i].Substring( ISMessage.MsgNormalStart.Length, msgs[i].Length - ISMessage.MsgNormalStart.Length - ISMessage.MsgNormalEnd.Length); MessageNotify?.Invoke(new ModSwapMessage(ESwapMsgType.NormalMessage, revMsg, client)); break; } //心跳包 if (msgs[i] == ISCommand.CmdClientHB || msgs[i] == ISCommand.CmdServerHB) { MessageNotify?.Invoke(new ModSwapMessage(ESwapMsgType.HeartBeat, null, client)); break; } //请求计算机名称 if (msgs[i] == ISCommand.CmdGetPcName) { string PCInfo = ISMessage.MsgPcNameStart + Environment.UserDomainName + "/" + Environment.UserName + ISMessage.MsgPcNameEnd; MessageNotify?.Invoke(new ModSwapMessage(ESwapMsgType.ComputerName, PCInfo, client)); break; } //收到计算机名称 if (msgs[i].StartsWith(ISMessage.MsgPcNameStart) && msgs[i].EndsWith(ISMessage.MsgPcNameEnd)) { string revMsg = msgs[i].Substring( ISMessage.MsgPcNameStart.Length, msgs[i].Length - ISMessage.MsgPcNameStart.Length - ISMessage.MsgPcNameEnd.Length); MessageNotify?.Invoke(new ModSwapMessage(ESwapMsgType.ComputerName, revMsg, client)); break; } //强制下线命令 if (msgs[i] == ISCommand.CmdClientRequShutdown) { MessageNotify?.Invoke(new ModSwapMessage(ESwapMsgType.ShutdownCommand, null, client)); break; } //请求下线命令 if (msgs[i] == ISCommand.CmdClientNeedShutdown) { MessageNotify?.Invoke(new ModSwapMessage(ESwapMsgType.ShutdownCommand, null, client)); break; } MessageNotify?.Invoke(new ModSwapMessage(ESwapMsgType.UnknowMessage, msgs[i], client)); } }