コード例 #1
0
    /// <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());
                }
            }
        }
    }
コード例 #2
0
        private void QueryOccupiedSeats()
        {
            var msg = new MessageConvention();

            msg.MsgType = MessageType.QueryOccupiedSeats;
            var bytes = MyHelper.BinarySerializeObject <MessageConvention>(msg);

            _client.Send(bytes);
        }
コード例 #3
0
ファイル: SocketConnectUI.cs プロジェクト: lxc1030/ServerTest
 public void Open(MessageConvention con)
 {
     curConvention = con;
     OnDisable();
     messageHandle.Clear();
     messageHandle.Add(con);
     SocketManager.ListenDelegate(true, messageHandle, OperationListenInfo);//添加侦听
     //Debug.Log("协议:" + con + " 显示挡板。");
     ChangeUIByState(NetState.显示挡板);
 }
コード例 #4
0
        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();
        }
コード例 #5
0
ファイル: FrmServer.cs プロジェクト: weimingtom/game-snake
        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);
                }
            }));
        }
コード例 #6
0
 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);
             }
         }
     }
 }
コード例 #7
0
ファイル: FrmServer.cs プロジェクト: weimingtom/game-snake
        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);
                }
            }));
        }