Пример #1
0
        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;
            }
        }
Пример #2
0
        /* 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);
        }
Пример #3
0
        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;
                }
            }
        }
Пример #4
0
        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();
        }
Пример #5
0
        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]));
                }
            }
        }