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; } }
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; } } } }
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; } }
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"); }