Exemplo n.º 1
0
        private void HandlePayingRequst(LJHSocket socket, YiTingPacket packet)
        {
            if (Setting == null)
            {
                return;
            }
            byte[] data = packet.Data;
            if (data == null || data.Length < 26)
            {
                return;
            }
            OpenCardEventArgs args = new OpenCardEventArgs()
            {
                CardID   = YiTingPacket.GetCardID(data.Take(19).ToArray()),
                CardType = data[19] == 0x01 ? YiTingShanFuSetting.CardType : string.Empty,
            };
            string    device = YiTingPacket.ConvertToAsc(new byte[] { data[20], data[21], data[22], data[23], data[24], data[25] });
            YiTingPOS pos    = Setting.GetReader(device);

            if (pos != null && pos.EntranceID.HasValue)
            {
                args.Entrance = ParkBuffer.Current.GetEntrance(pos.EntranceID.Value);
            }
            if (this.OnPaying != null)
            {
                this.OnPaying(this, args);
            }

            if (args.Payment != null)
            {
                if (args.Payment.GetPaying() == 0)
                {
                    args.Payment.PaymentCode = Park.BusinessModel.Enum.PaymentCode.Computer;
                    args.Payment.PaymentMode = Park.BusinessModel.Enum.PaymentMode.Pos;
                    if (this.OnPaidOk != null)
                    {
                        this.OnPaidOk(this, args);
                    }
                }
                else
                {
                    lock (_WaitingPayingCardsLocker)
                    {
                        _WaitingPayingCards[args.CardID] = args; //保存某个读卡器目前正在处理的收费记录
                    }
                    List <byte> temp = new List <byte>();
                    temp.AddRange(data.Take(26));                                               //取包的前26字节
                    temp.AddRange(new byte[5]);                                                 //车位号
                    temp.AddRange(YiTingPacket.GetDateBytes(args.Payment.EnterDateTime.Value)); //入场时间
                    temp.AddRange(YiTingPacket.GetIntervalBytes(args.Payment.EnterDateTime.Value, args.Payment.ChargeDateTime));
                    temp.AddRange(YiTingPacket.GetMoneyBytes(args.Payment.GetPaying()));        //金额
                    temp.Add(0x00);                                                             //未出场
                    YiTingPacket response = packet.CreateResponse(temp.ToArray());
                    byte[]       r        = response.ToBytes();
                    socket.SendData(r);
                    Ralid.GeneralLibrary.LOG.FileLog.Log("驿停闪付", "回复扣款 " + Ralid.GeneralLibrary.HexStringConverter.HexToString(r, " "));
                }
            }
        }
Exemplo n.º 2
0
 private void s_OnClosed(object sender, EventArgs e)
 {
     lock (_BuffersLocker)
     {
         LJHSocket s = sender as LJHSocket;
         _Buffers.Remove(s);
         s.OnDataArrivedEvent -= socket_OnDataArrivedEvent;
         s.OnClosed           -= new EventHandler(s_OnClosed);
     }
 }
Exemplo n.º 3
0
        private void HandleHeartBeat(LJHSocket socket, YiTingPacket packet)
        {
            List <byte> d = new List <byte>();

            d.AddRange(packet.Data);
            d.Add(_OK); //正常处理
            YiTingPacket response = packet.CreateResponse(d.ToArray());

            byte[] r = response.ToBytes();
            socket.SendData(r);
            Ralid.GeneralLibrary.LOG.FileLog.Log("驿停闪付", "回复心跳 " + Ralid.GeneralLibrary.HexStringConverter.HexToString(r, " "));
        }
Exemplo n.º 4
0
        private void HandlePayingState(LJHSocket socket, YiTingPacket packet)
        {
            byte[] data = packet.Data;
            if (data == null || data.Length < 42)
            {
                return;
            }
            string            cardID = YiTingPacket.GetCardID(data.Take(19).ToArray());
            OpenCardEventArgs args   = null;

            lock (_WaitingPayingCardsLocker)
            {
                if (_WaitingPayingCards.ContainsKey(cardID))
                {
                    args = _WaitingPayingCards[cardID];
                    _WaitingPayingCards.Remove(cardID);
                }
            }
            if (args != null)
            {
                if (data[41] == 0x01)
                {
                    byte[] paid = new byte[6];
                    Array.Copy(data, 34, paid, 0, paid.Length);
                    args.Paid = YiTingPacket.GetMoney(paid);
                    args.Payment.PaymentCode = Park.BusinessModel.Enum.PaymentCode.Computer;
                    args.Payment.PaymentMode = Park.BusinessModel.Enum.PaymentMode.Pos;
                    if (this.OnPaidOk != null)
                    {
                        this.OnPaidOk(this, args);
                    }
                }
                else if (data[41] == 0x02)
                {
                    args.LastError = "余额不足";
                    if (this.OnPaidFail != null)
                    {
                        this.OnPaidFail(this, args);
                    }
                }

                List <byte> temp = new List <byte>();
                temp.AddRange(data.Take(19)); //取包的前19字节
                temp.Add(_OK);
                temp.Add(0x00);               //未出场
                YiTingPacket response = packet.CreateResponse(temp.ToArray());
                byte[]       r        = response.ToBytes();
                socket.SendData(r);
                Ralid.GeneralLibrary.LOG.FileLog.Log("驿停闪付", "回复扣款状态 " + Ralid.GeneralLibrary.HexStringConverter.HexToString(r, " "));
            }
        }
Exemplo n.º 5
0
 private void ExtraData(LJHSocket socket, YiTingBuffer buffer)
 {
     try
     {
         YiTingPacket packet = buffer.Read();
         while (packet != null)
         {
             HandlePacket(socket, packet);
             packet = buffer.Read();
         }
     }
     catch (Exception ex)
     {
         Ralid.GeneralLibrary.ExceptionHandling.ExceptionPolicy.HandleException(ex);
     }
 }
Exemplo n.º 6
0
        private void HandleEnterRead(LJHSocket socket, YiTingPacket packet)
        {
            if (Setting == null)
            {
                return;
            }
            byte[] data = packet.Data;
            if (data == null || data.Length < 26)
            {
                return;
            }
            OpenCardEventArgs args = new OpenCardEventArgs()
            {
                CardID   = YiTingPacket.GetCardID(data.Take(19).ToArray()),
                CardType = data[19] == 0x01 ? YiTingShanFuSetting.CardType : string.Empty,
            };
            string    device = YiTingPacket.ConvertToAsc(new byte[] { data[20], data[21], data[22], data[23], data[24], data[25] });
            YiTingPOS pos    = Setting.GetReader(device);

            if (pos != null && pos.EntranceID.HasValue)
            {
                args.Entrance = ParkBuffer.Current.GetEntrance(pos.EntranceID.Value);
            }
            if (this.OnReadCard != null)
            {
                this.OnReadCard(this, args);
            }

            List <byte> temp = new List <byte>();

            temp.AddRange(data);
            byte[] carPlate = UnicodeEncoding.Unicode.GetBytes("粤A24M55");
            byte[] t        = new byte[27];
            Array.Copy(carPlate, t, carPlate.Length);
            temp.AddRange(t);
            temp.AddRange(new byte[2]);
            temp.AddRange(YiTingPacket.GetDateBytes(DateTime.Now));
            temp.Add(_OK);
            YiTingPacket response = packet.CreateResponse(temp.ToArray());

            byte[] r = response.ToBytes();
            socket.SendData(r);
            Ralid.GeneralLibrary.LOG.FileLog.Log("驿停闪付", "回复读卡 " + Ralid.GeneralLibrary.HexStringConverter.HexToString(r, " "));
        }
Exemplo n.º 7
0
 private void TCPListen()
 {
     try
     {
         IPEndPoint iep = new IPEndPoint(IPAddress.Parse(Setting.IP), Setting.Port);
         _Listener = new TcpListener(iep);
         _Listener.Start();
         while (true)
         {
             Socket    socket = _Listener.AcceptSocket();
             LJHSocket s      = new LJHSocket(socket);
             s.OnDataArrivedEvent += socket_OnDataArrivedEvent;
             s.OnClosed           += new EventHandler(s_OnClosed);
         }
     }
     catch (ThreadAbortException)
     {
     }
     catch (Exception ex)
     {
         Ralid.GeneralLibrary.ExceptionHandling.ExceptionPolicy.HandleException(ex);
     }
 }
Exemplo n.º 8
0
 private void HandlePacket(LJHSocket socket, YiTingPacket packet)
 {
     if (!packet.IsValid)
     {
         return;
     }
     Ralid.GeneralLibrary.LOG.FileLog.Log("驿停闪付", "收到数据 " + Ralid.GeneralLibrary.HexStringConverter.HexToString(packet.ToBytes(), " "));
     if (packet.IsHearbeat) //心跳包
     {
         HandleHeartBeat(socket, packet);
     }
     else if (packet.IsEnterRead)
     {
         HandleEnterRead(socket, packet);
     }
     else if (packet.IsPayingRequest)
     {
         HandlePayingRequst(socket, packet);
     }
     else if (packet.IsPayingState)
     {
         HandlePayingState(socket, packet);
     }
 }