예제 #1
0
        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);
                }
            }));
        }
예제 #2
0
        private void ServerDataReceivedHandler(object sender, SocketMessageEventArgs e)
        {
            var msg = MyHelper.BinaryDeserializeObject <MessageConvention>(e.Buffer);

            if (msg.MsgType == MessageType.OccupySeat)
            {
                _viewSeat.UserSitdownAction(msg.Seat.SeatNumber, msg.Seat.UserName);
            }
            else if (msg.MsgType == MessageType.QueryOccupiedSeats)
            {
                var os = msg.OccupiedSeats;
                foreach (var item in os)
                {
                    _viewSeat.UserSitdownAction(item.SeatNumber, item.UserName);
                }
            }
            else if (msg.MsgType == MessageType.UserLeave)
            {
                _viewSeat.UserStandupAction(msg.Seat.SeatNumber, msg.Seat.UserName);
            }
        }