/// <summary> /// 广播消息逻辑 /// </summary> /// <param name="convention">广播类型</param> /// <param name="message">广播值</param> /// <param name="uniqueID">除该用户以外都广播</param> private void BoardcastMessage(MessageConvention convention, byte[] message, int uniqueID = -1, byte xieyiSecond = 0, ProtocolType netType = ProtocolType.Tcp) { MessageXieYi msgXY = new MessageXieYi((byte)convention, xieyiSecond, message); for (int i = 0; i < ActorList.Count; i++)//逐个玩家遍历发送消息 { if (ActorList[i].Register == null) { continue; } if (ActorList[i].CurState == RoomActorState.Offline)//离线玩家不发送 { continue; } if (ActorList[i].UniqueID != uniqueID) { if (netType == ProtocolType.Tcp) { AsyncIOCPServer.instance.SendSave(UserTokenInfo[ActorList[i].UniqueID], msgXY.ToBytes()); } else if (netType == ProtocolType.Udp) { if (udpUserInfo[i] == null) { Log4Debug("广播时,站位{0}用户udp未连接。" + i); continue; } UdpServer.Instance.SendMessage(udpUserInfo[i].lastPoint, msgXY.ToBytes()); } } } }
private void QueryOccupiedSeats() { var msg = new MessageConvention(); msg.MsgType = MessageType.QueryOccupiedSeats; var bytes = MyHelper.BinarySerializeObject <MessageConvention>(msg); _client.Send(bytes); }
public void Open(MessageConvention con) { curConvention = con; OnDisable(); messageHandle.Clear(); messageHandle.Add(con); SocketManager.ListenDelegate(true, messageHandle, OperationListenInfo);//添加侦听 //Debug.Log("协议:" + con + " 显示挡板。"); ChangeUIByState(NetState.显示挡板); }
public void UserSitdownHandler(object sender, OccupySeatEventArgs e) { var msg = new MessageConvention(); msg.MsgType = MessageType.OccupySeat; msg.Seat = new Seat() { UserName = e.UserName, SeatNumber = e.SeatNumber }; var bytes = MyHelper.BinarySerializeObject <MessageConvention>(msg); _client.Send(bytes); _viewClient.Show(); }
private void ClientDataReceivedHandler(object sender, BasicLibrary.DataStructure.SocketMessageEventArgs e) { this.Invoke(new Action(() => { var bytes = new byte[e.Size]; Array.Copy(e.Buffer, bytes, e.Size); var currentEP = e.EndPoint as IPEndPoint; var convention = MyHelper.BinaryDeserializeObject <MessageConvention>(bytes); if (convention.MsgType == MessageType.OccupySeat) { var clients = _server.TcpClientListeners; seats.Add(new Seat() { SeatNumber = convention.Seat.SeatNumber, UserName = convention.Seat.UserName, IPEndPoint = currentEP }); foreach (var client in clients) { if (client.HostName == currentEP.Address.ToString() && client.Port == currentEP.Port) { continue; } client.SendMessage(bytes); } } else if (convention.MsgType == MessageType.QueryOccupiedSeats) { var ss = new MessageConvention(); ss.MsgType = MessageType.QueryOccupiedSeats; ss.OccupiedSeats = seats; var bs = MyHelper.BinarySerializeObject <MessageConvention>(ss); _server.SendMessage(bs, currentEP.Address.ToString(), currentEP.Port); } else if (convention.MsgType == MessageType.Talk) { var msg = System.Text.Encoding.ASCII.GetString(bytes); var rm = new ReceivedMessageEntry(msg, e.EndPoint.ToString()); RecordMessage(rm); } })); }
public static void ListenDelegate(bool isListen, List <MessageConvention> listen, Action <MessageXieYi> action) { for (int i = 0; i < listen.Count; i++) { MessageConvention temp = listen[i]; lock (allHandle) { if (!allHandle.ContainsKey(temp)) { allHandle.Add(temp, MessageEvent); } if (isListen) { allHandle[temp] += new MessageEventHandler(action); } else { allHandle[temp] -= new MessageEventHandler(action); } } } }
private void ClientDisconnectedHandler(object sender, SocketConnectedEventArgs e) { this.Invoke(new Action(() => { var seat = seats.First(s => s.IPEndPoint == e.IPEndPoint); if (seat == null) { return; } this.cmbClientList.Items.Remove(e.IPEndPoint.ToString()); var clients = _server.TcpClientListeners; seats.Remove(seat); foreach (var client in clients) { var msg = new MessageConvention(); msg.MsgType = MessageType.UserLeave; msg.Seat = seat; var bytes = MyHelper.BinarySerializeObject <MessageConvention>(msg); client.SendMessage(bytes); } })); }