private void TekrarBaglan(object turnikeObj) { Turnike turnike = (Turnike)turnikeObj; try { turnike.Baglaniyor = true; Int32 connectionAttempt = 0; Socket dataSocketNew = null; while (dataSocketNew == null) { connectionAttempt++; dataSocketNew = Baglan(turnike); } _table.Rows.RemoveAt(_table.Rows.IndexOf(_table.Select("TurnikeNo = " + turnike.TurnikeNo)[0])); _table.Rows.Add(dataSocketNew, turnike.TurnikeNo, turnike); } catch (Exception ex) { if (!this.IsDisposed) { Logger.isError = true; Logger.Method = "Main, TekrarBaglan"; Logger.Message = ex.Message; } } finally { _threadsReconnect.Remove("thread_" + turnike.TurnikeNo); turnike.Baglaniyor = false; } }
/* Okuyucu Client modda ise * private void OkuyucuDinle(object clientSocket) * { * try * { * // * - Listeden gönderilen turnike bilgileri * - turnikeNum: Turnikenin veritabanında ki numarası (ID değil, elle atanır) * - startKomut: kart okuyucular ile bağlantı sağlanabildiğine dair sesli uyarı komutu (BUZZER) * - komut: Geçerli kart okunduğunda gönderilen komutlar (röle aç, buzzer vs.) * - failKomut: Geçersiz kart okunduğunda gönderilen sesli uyarı komutu (BUZZER uzun süreli) * // * Socket client = (Socket)clientSocket; * IPEndPoint ipClient = (IPEndPoint)client.RemoteEndPoint; * String clientIP = ipClient.Address.ToString(); * DataRow[] turnikeler = Settings.Turnikeler.Select("IP ='" + clientIP + "'"); * * DataRow turnikeRow = turnikeler[0]; * Turnike turnike = new Turnike(); * * turnike.TurnikeNo = Convert.ToInt32(turnikeRow["TURNIKE_NO"]); * turnike.CihazID = Convert.ToString(turnikeRow["CIHAZ_ID"]); * turnike.IP = Convert.ToString(turnikeRow["IP"]); * turnike.Port = Convert.ToInt32(turnikeRow["PORT"]); * turnike.StartKomut = Convert.ToString(turnikeRow["START_KOMUT"]); * turnike.Komut = Convert.ToString(turnikeRow["KOMUT"]); * turnike.FailKomut = Convert.ToString(turnikeRow["FAIL_KOMUT"]); * turnike.Aktif = true; * * ASCIIEncoding encoder = new ASCIIEncoding(); * //Data data = new Data(4096); * * Byte[] gelenBytes = new Byte[4096]; * Byte[] gidenBytes = encoder.GetBytes(turnike.CihazID + turnike.Komut); * Byte[] gidenBytesFail = encoder.GetBytes(turnike.CihazID + turnike.FailKomut); * * _table.Rows.Add(client, turnike.TurnikeNo, turnike); * Int32 hataSayac = 0; * * while (turnike.Aktif) * { * int gelenVeri = 0; * * DataRow[] socketRow = _table.Select("TurnikeNo = " + turnike.TurnikeNo); * client = (Socket)socketRow[0]["Socket"]; * * try * { * gelenVeri = client.Receive(gelenBytes, 0, gelenBytes.Length, SocketFlags.None); * hataSayac = 0; * } * catch (Exception ex) * { * if (hataSayac >= 30) * { * if (!this.IsDisposed) * { * Logger.isError = true; * Logger.Method = "Main, OkuyucuBaglan, Bağlantı yok"; * Logger.Message = ex.Message; * this.BeginInvoke(new deleg(SistemDurum), Convert.ToString(turnike.TurnikeNo) + ". Turnike ile bağlantı koptu!"); * } * hataSayac = 0; * } * } * * String gelenStr = ""; * if (gelenVeri > 0) * { * gelenStr = encoder.GetString(gelenBytes, 0, gelenVeri); * } * * if (gelenStr != "") * { * //String gelenStr = encoder.GetString(gelenBytes, 0, gelenVeri); * * Char ayrac = Convert.ToChar(","); * String[] gelenBilgi = gelenStr.Split(ayrac); // Okuyucudan gelen veriler "," ile ayrılmış * * String kartBilgisi = Convert.ToString(gelenBilgi[1]); // Dizinin 2. elemanı kart ID bilgisi * Int64 okunanKartno = Convert.ToInt64(kartBilgisi.Substring(4)); // "UID=" den sonra kart IDsi başlıyor * * Kart kart = new Kart(); * * // Okuyucudan gelen kart IDsi ile veritabanındakiler ters, önce bu düzeltilir ve * // daha sonra veritabanından kart ID kontrolü yapılır * Int64 kartid = tersineCevir(okunanKartno); * * kart = DB.KartKontrol(kartid); * * if (KartOkundu.NewUser | KartOkundu.DelUser) * { * KartOkundu.TCKimlik = kart.Tckimlik; * KartOkundu.Ad = kart.Ad; * KartOkundu.Soyad = kart.Soyad; * KartOkundu.KartID = kartid; * } * * kart.CihazID = gelenBilgi[0]; // Okuyucudan gelen veri dizisinin ilk elemanı cihaz IDsi * * kart.TurnikeNo = turnike.TurnikeNo; * * // Okunan karta ait bilgileri ekrana yazdır * if (!this.IsDisposed) * { * this.BeginInvoke(new delegKart(KartBilgiBas), kart); * * if (kart.GecisOnay) * { * client.Send(gidenBytes); * this.BeginInvoke(new deleg(Mesaj), ""); * } * else * { * client.Send(gidenBytesFail); * this.BeginInvoke(new deleg(Mesaj), "Geçersiz kart veya geçiş izni yok!"); * } * DB.GecisKaydiYap(kart); * } * } * * if (!client.Connected) * { * if (!this.IsDisposed) * { * Logger.isError = true; * Logger.Method = "Main, OkuyucuDinle, Bağlantı koptu"; * Logger.Message = ((IPEndPoint)client.RemoteEndPoint).Address.ToString() + " yeniden bağlanılacak"; * this.BeginInvoke(new deleg(SistemDurum), Convert.ToString(turnike.TurnikeNo) + ". Turnike ile bağlantı koptu!"); * } * _table.Rows.RemoveAt(_table.Rows.IndexOf(_table.Select("TurnikeNo = " + turnike.TurnikeNo)[0])); * turnike.Aktif = false; * } * } * * //if (outerSocket != null) outerSocket.Close(1); * } * catch (Exception ex) * { * if (!this.IsDisposed) * { * Logger.isError = true; * Logger.Method = "Main, OkuyucuVeriAl"; * Logger.Message = ex.Message; * this.BeginInvoke(new deleg(Hata), "Sektör 2' de hata!"); * //reconnectTimer++; * } * } * } */ #endregion #region "Sektör 3 Turnike Kart Okuyucuları ile Bağlantı Kur" private Socket Baglan(Turnike turnike) { Socket socket = null; try { Socket srvSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); ipserv = new IPEndPoint(IPAddress.Parse(turnike.IP), turnike.Port); srvSocket.Connect(ipserv); socket = srvSocket; } catch (Exception ex) { if (!this.IsDisposed) { Logger.isError = true; Logger.Method = "Main, Baglan"; Logger.Message = ex.Message; } } return(socket); }
private void TurnikeAc(DataRow clientRow) { try { Socket dataSocket = (Socket)clientRow["Socket"]; Turnike turnike = (Turnike)clientRow["TurnikeClass"]; ASCIIEncoding encoder = new ASCIIEncoding(); Byte[] turnikeAcBytes = encoder.GetBytes(turnike.CihazID + turnike.Komut); try { dataSocket.Send(turnikeAcBytes); } catch (Exception ex) { if (ex is SocketException || ex is ObjectDisposedException) { if (!this.IsDisposed) { Logger.isError = true; Logger.Method = "Main, TurnikeAc, Baglanti yok"; Logger.Message = ex.Message; } } } } catch (Exception ex) { if (!this.IsDisposed) { Logger.isError = true; Logger.Method = "Main, TurnikeAc"; Logger.Message = ex.Message; } } }
private void Uptimer_Elapsed(object sender, EventArgs e) { _elapsedUp++; if (_running && _elapsedUp >= 5) { _uptimer.Stop(); _elapsedUp = 0; ASCIIEncoding encoder = new ASCIIEncoding(); for (Int32 i = 0; i < _table.Rows.Count; i++) { Socket dataSocket = (Socket)_table.Rows[i]["Socket"]; Turnike turnike = (Turnike)_table.Rows[i]["TurnikeClass"]; Byte[] wakeUpBytes = encoder.GetBytes(turnike.CihazID + _komut); try { dataSocket.Send(wakeUpBytes); this.BeginInvoke(new delegLights(Lights), turnike.TurnikeNo, "Green"); } catch (Exception ex) { this.BeginInvoke(new delegLights(Lights), turnike.TurnikeNo, "Red"); Logger.isError = true; Logger.Method = "Main, Uptimer"; Logger.Message = ex.Message; if (!turnike.Baglaniyor) { _threadsReconnect.Add("thread_" + turnike.TurnikeNo, new Thread(new ParameterizedThreadStart(TekrarBaglan))); ((Thread)_threadsReconnect["thread_" + turnike.TurnikeNo]).Start(turnike); } } } for (Int32 i = 0; i < _threadsRunning.Rows.Count; i++) { Thread thread = (Thread)_threadsRunning.Rows[i]["Thread"]; DataRow turnikeRow = (DataRow)_threadsRunning.Rows[i]["TurnikeRow"]; if (!thread.IsAlive) { String turnikeNo = Convert.ToString(_threadsRunning.Rows[i]["TurnikeNo"]); Int32 rowIndex = Convert.ToInt32(_table.Rows.IndexOf(_table.Select("TurnikeNo = " + turnikeNo)[0])); Socket dataSocket = (Socket)_table.Rows[rowIndex]["Socket"]; try { dataSocket.Shutdown(SocketShutdown.Both); while (dataSocket.Connected) { } dataSocket.Close(); } catch (Exception ex) { } _table.Rows.RemoveAt(rowIndex); _threadsRunning.Rows.RemoveAt(i); Thread newThread = new Thread(new ParameterizedThreadStart(OkuyucuVeriAl)); newThread.Start(turnikeRow); _threadsRunning.Rows.Add(newThread, Convert.ToInt32(turnikeNo), turnikeRow); } } } _uptimer.Start(); }
private void OkuyucuVeriAl(object turnikeObj) { /* * - Listeden gönderilen turnike bilgileri * - TurnikeNo: Turnikenin veritabanında ki numarası (ID değil, elle atanır) * - StartKomut: kart okuyucular ile bağlantı sağlanabildiğine dair sesli uyarı komutu (BUZZER) * - Komut: Geçerli kart okunduğunda gönderilen komutlar (röle aç, buzzer vs.) * - FailKomut: Geçersiz kart okunduğunda gönderilen sesli uyarı komutu (BUZZER uzun süreli) */ DataRow turnikeRow = (DataRow)turnikeObj; Turnike turnike = new Turnike(); turnike.TurnikeNo = Convert.ToInt32(turnikeRow["TURNIKE_NO"]); turnike.CihazID = Convert.ToString(turnikeRow["CIHAZ_ID"]); turnike.IP = Convert.ToString(turnikeRow["IP"]); turnike.Port = Convert.ToInt32(turnikeRow["PORT"]); turnike.StartKomut = Convert.ToString(turnikeRow["START_KOMUT"]); turnike.Komut = Convert.ToString(turnikeRow["KOMUT"]); turnike.FailKomut = Convert.ToString(turnikeRow["FAIL_KOMUT"]); turnike.Aktif = true; try { ASCIIEncoding encoder = new ASCIIEncoding(); Byte[] gelenBytes = new Byte[4096]; Byte[] gidenBytes = encoder.GetBytes(turnike.CihazID + turnike.Komut); Byte[] gidenBytesFail = encoder.GetBytes(turnike.CihazID + turnike.FailKomut); /* * NetworkStream onOffStream = client.GetStream(); * Byte[] onOffBytes = encoder.GetBytes(CihazID + StartKomut); * onOffStream.Write(onOffBytes, 0, onOffBytes.Length); * onOffStream.Flush(); */ Int32 connectionAttempt = 0; Socket dataSocket = null; while (dataSocket == null) { connectionAttempt++; dataSocket = Baglan(turnike); this.BeginInvoke(new delegLights(Lights), turnike.TurnikeNo, "Yellow"); } if (dataSocket != null) { this.BeginInvoke(new deleg(SistemDurum), ""); } _table.Rows.Add(dataSocket, turnike.TurnikeNo, turnike); Int32 hataSayac = 0; while (turnike.Aktif) { int gelenVeri = 0; DataRow[] socketRow = _table.Select("TurnikeNo = " + turnike.TurnikeNo); dataSocket = (Socket)socketRow[0]["Socket"]; try { gelenVeri = dataSocket.Receive(gelenBytes, 0, gelenBytes.Length, SocketFlags.None); hataSayac = 0; } catch (Exception ex) { if (hataSayac >= 50) { if (!this.IsDisposed) { Logger.isError = true; Logger.Method = "Main, OkuyucuBaglan, Bağlantı yok"; Logger.Message = ex.Message; } hataSayac = 0; } } String gelenStr = ""; if (gelenVeri > 0) { gelenStr = encoder.GetString(gelenBytes, 0, gelenVeri); } this.BeginInvoke(new deleg(Hata), gelenStr); if (gelenStr != "") { //"MCR02-3EAAF7" //Int32 cihaz1 = 0; //cihaz1 = gelenStr.IndexOf("MCR"); //this.BeginInvoke(new deleg(Mesaj), Convert.ToString(cihaz1)); string pattern = @"(MCR)([A-F0-9]*)(-)([A-F0-9]*)(,UID=)([0-9]*)"; Regex myRegex = new Regex(pattern, RegexOptions.IgnoreCase); Match m = myRegex.Match(gelenStr); // m is the first match string pattern2 = @"(MCR)([A-F0-9]*)(-)([A-F0-9]*)"; Regex myRegex2 = new Regex(pattern2, RegexOptions.IgnoreCase); Match m2 = myRegex2.Match(m.Value); // m is the first match string m3 = m.Value.Substring(m2.Value.Length + 5); //String[] gelenBilgi = gelenStr.Split(_ayrac); // Okuyucudan gelen veriler "," ile ayrılmış Int64 okunanKartno = 0; String kartBilgisi = ""; if (m.Value.Length >= 2) { try { //this.BeginInvoke(new deleg(Mesaj), Convert.ToString(gelenBilgi[1]) + " - " + Convert.ToString(kartBilgisi.Substring(4))); //kartBilgisi = Convert.ToString(gelenBilgi[1]); // Dizinin 2. elemanı kart ID bilgisi //this.BeginInvoke(new deleg(Mesaj), kartBilgisi); //okunanKartno = Convert.ToInt64(kartBilgisi.Substring(4)); // "UID=" den sonra kart IDsi başlıyor okunanKartno = Convert.ToInt64(m3); this.BeginInvoke(new deleg(Mesaj), Convert.ToString(okunanKartno)); } catch (Exception ex) { //this.BeginInvoke(new deleg(Mesaj), "3"); } } if (okunanKartno > 0) { Kart kart = new Kart(); // Okuyucudan gelen kart IDsi ile veritabanındakiler ters, önce bu düzeltilir ve // daha sonra veritabanından kart ID kontrolü yapılır Int64 kartid = 0; try { kartid = tersineCevir(okunanKartno); this.BeginInvoke(new deleg(Mesaj), Convert.ToString(kartid)); } catch (Exception ex) { Logger.isError = true; Logger.Method = "Main, Tersine Çevir"; Logger.Message = ex.Message; } DBThread dbThread = new DBThread(); kart = dbThread.KartKontrol(kartid); kart.Birim = ""; if (kart.KartTipid == 2 || kart.KartTipid == 3) { Kart picard = new Kart(); picard = DB.ResimGetir(kart.Tckimlik); kart.Resim = picard.Resim; kart.Birim = picard.Birim; } //kart.CihazID = gelenBilgi[0]; // Okuyucudan gelen veri dizisinin ilk elemanı cihaz IDsi kart.CihazID = m2.Value; kart.TurnikeNo = turnike.TurnikeNo; kart.GecisTarihi = DateTime.Now; // Okunan karta ait bilgileri ekrana yazdır if (!this.IsDisposed) { this.BeginInvoke(new delegKart(KartBilgiBas), kart); if (kart.GecisOnay) { dataSocket.Send(gidenBytes); } else { dataSocket.Send(gidenBytesFail); } } } } DataRow[] aktifRow = _table.Select("TurnikeNo = " + turnike.TurnikeNo); if (aktifRow.Length > 0) { Turnike aktifTurnike = (Turnike)aktifRow[0]["TurnikeClass"]; turnike.Aktif = aktifTurnike.Aktif; } } } catch (Exception ex) { if (!this.IsDisposed) { Logger.isError = true; Logger.Method = "Main, OkuyucuVeriAl"; Logger.Message = ex.Message; this.BeginInvoke(new deleg(Hata), "Sektör 2' de hata!"); // Hata oluştuğunda ilgili soket ve turnike bilgilerinin tablodan çıkarılması _table.Rows.RemoveAt(_table.Rows.IndexOf(_table.Select("TurnikeNo = " + turnike.TurnikeNo)[0])); } } }