示例#1
0
        private void timerListen_Tick(object sender, EventArgs e)
        {
            if (!Valid)
            {
                return;
            }
            if (Registe < DateTime.Now)
            {
                Valid = false;
                CurrConnSta = ConnSta.DisListen;
                this.btnConnToPMS.Enabled = false;
                FrmRegister frmRegiste = new FrmRegister();
                frmRegiste.ShowDialog();
            }
            else
            {
                Valid = true;
                if (CurrConnSta == ConnSta.DisListen)
                {
                    CurrConnSta = ConnSta.Ready;
                }
                this.btnConnToPMS.Enabled = true;
            }

            switch (CurrConnSta)
            {
                case ConnSta.Listen:
                    Hint(this.lblListen, "Listening...", true, this.transAreaB,
                        false, this.timerConnectClient);
                    break;
                case ConnSta.Connected:
                    Hint(this.lblListen, "", false, this.transAreaB, true,
                        this.timerConnectClient);
                    break;
                case ConnSta.NoPort:
                case ConnSta.DisListen:
                    Hint(this.lblListen, "Don't listen", true, this.transAreaB,
                        false, this.timerConnectClient);
                    break;
                case ConnSta.Ready:
                    StartListen();
                    break;
                default:
                    break;
            }

            switch (CurrInterfaceConnSta)
            {
                case ConnSta.Connected:
                    Hint(this.lblRequest, "", false, this.transAreaA,
                        true, this.timerConnectInterface);
                    break;
                case ConnSta.Disconnect:
                case ConnSta.NULL:
                    Hint(this.lblRequest, "Pending", true, this.transAreaA,
                        false, this.timerConnectInterface);
                    break;
                default:
                    break;
            }
        }
示例#2
0
 private void Listener()
 {
     sqlHelper.CurrConn = Utils.DbType.Local;
     int port = Convert.ToInt32(sqlHelper.ExecuteScalar("select keyport from Interface", null));
     if (port == 0)
     {
         CurrConnSta = ConnSta.NoPort;
         return;
     }
     IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, port);
     BollenSocket serverSocket = new BollenSocket(endPoint);
     if (serverSocket.Listen())
     {
         while (Valid)
         {
             CurrConnSta = ConnSta.Listen;
             try
             {
                 TcpClient clientTcp = serverSocket.TCPListener.AcceptTcpClient();
                 ThreadPool.QueueUserWorkItem(new WaitCallback(ReceiveData), clientTcp);
             }
             catch
             {
                 //listening error.
                 break;
             }
         }
     }
 }
示例#3
0
        private void ReceiveData(object state)
        {
            TcpClient client = (TcpClient)state/*clientTcp*/;
            NetworkStream ns = client.GetStream();
            //byte[] buffer = new byte[1024];
            IPEndPoint clientEndPoint = (IPEndPoint)client.Client.RemoteEndPoint;
            IPHostEntry clientHostEntry = Dns.GetHostEntry(clientEndPoint.Address.ToString());
            string clientHostName = clientHostEntry.HostName;
            string serverHostName = Dns.GetHostName();

            SocketEntity entity = new SocketEntity(
                Command.IF, new string[]{}, serverHostName, clientHostName);
            BollenSocket.Send(ns, entity);

            string keycoder = string.Empty;
            while (Valid)
            {
                CurrConnSta = ConnSta.Connected;
                try
                {
                    entity = BollenSocket.Receive(ns);
                    if (entity == null)
                    {
                        continue;
                    }

                    switch (entity.Cmd)
                    {
                        case Command.RQ:
                            keycoder = entity.Data[0];
                            ClientList.Add(client, keycoder);
                            this.UpdateView(new Workstation { KeyCoder = keycoder, WorkstationName = clientHostName });
                            break;
                        case Command.KA:
                            string answer;
                            if (entity.Data[0] == "Success")
                            {
                                answer = InstructMap["Success"];
                                //delete blacklist;
                                DeleteBlackList(entity.Data[1]);
                                //save issue records
                                IssueRecEntity recEntity = Manage.GetRecEntity(entity.Data[2]);
                                if (recEntity != null)
                                {
                                    UpdateRoomData(recEntity.RoomNumber, "2", recEntity.GuestName,
                                        recEntity.ArrivalDate, recEntity.DepartureDate);
                                    recEntity.Workstation = entity.Data[3];
                                    recEntity.OperateTime = entity.Data[4];
                                    InsertIssueRec(recEntity);
                                }
                                else
                                {
                                    this.CommLog("Issue record save failed");
                                }

                            }
                            else
                            {
                                answer = InstructMap["Failure"];
                            }

                            if (InterfaceClient == null)
                            {
                                this.CommLog("PMS interface is broken");
                                break;
                            }

                            answer = answer.Replace("*", keycoder);

                            try
                            {
                                BollenSocket.Write(InterfaceClient.NetStream,Encoding.UTF8.GetBytes(answer));
                            }
                            catch
                            {
                                break;
                            }
                            break;
                        default:
                            break;
                    }
                }
                catch
                {
                    //error process.
                    try
                    {
                        ClientList.Remove(client);
                    }
                    catch
                    {

                    }
                    break;
                }
            }
            if (keycoder != string.Empty)
            {
                frmWorkstation.SafeDel(keycoder);
            }

            if (ClientList.Count == 0)
            {
                CurrConnSta = ConnSta.Listen;
            }
        }
示例#4
0
        public void ConnectToInterface()
        {
            sqlHelper.CurrConn = Utils.DbType.Local;
            string sql = "select IP, IfPort from Interface";
            DataRow row = sqlHelper.ExecuteDataSet(sql, null,null).Tables[0].Rows[0];
            if (row == null)
                return;
            string ip = row["IP"].ToString();
            int port = Convert.ToInt32(row["IfPort"]);
            IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(ip), port);
            InterfaceClient = new BollenSocket(endPoint);
            try
            {
                if (InterfaceClient.Connect())
                {

                    while (Valid && IsReceive)
                    {
                        CurrInterfaceConnSta = ConnSta.Connected;
                        int size;
                        byte[] buffer = BollenSocket.Read(InterfaceClient.NetStream, out size);

                        if (size == 0)
                        {
                            break;
                        }
                        string rec = Encoding.UTF8.GetString(buffer, 0, size);
                        this.CommLog(rec + "  <- From Pms");

                        //去掉消息前,后缀
                        rec = rec.Replace(InstructMap["PR"],"");
                        rec = rec.Replace(InstructMap["SU"],"");

                        Dictionary<string, string> newInstruct = InstructTransform(rec);
                        if (newInstruct == null)
                        {
                            this.CommLog("Instruct map is empty,Pls configure interface specification.");
                            continue;
                        }
                        string kc, err;
                        Command cmd;
                        if (!VerifyInstruct(newInstruct, out kc, out cmd, out err))
                        {
                            this.CommLog(err);
                            continue;
                        }

                        TcpClient host = null;
                        foreach (TcpClient tcpClient in ClientList.Keys)
                        {
                            if (ClientList[tcpClient] == kc)
                            {
                                host = tcpClient;
                            }
                        }

                        if (host == null)
                        {
                            this.CommLog("[ " + kc + " ]corresponding host not found");
                            continue;
                        }

                        NetworkStream stream = host.GetStream();

                        switch (cmd)
                        {
                            case Command.KR: //issue card
                                PackageInstruct(newInstruct);
                                BollenSocket.Send(stream, new SocketEntity(cmd, Data, "", ""));
                                break;
                            case Command.KD: //delete card
                                BollenSocket.Send(stream, new SocketEntity(cmd, new string[] { }, "", ""));
                                break;
                            case Command.KG: //read card
                                BollenSocket.Send(stream, new SocketEntity(cmd, new string[] { Auth_Code }, "", ""));
                                break;
                            default:
                                break;
                        }
                    }
                }
            }
            catch
            {
            }
            InterfaceClient = null;
            CurrInterfaceConnSta = ConnSta.Disconnect;
            SetConnectButtonText("Connect");
        }