コード例 #1
0
        static void Main(string[] args)
        {
            Logger.SetLogWriter(new LogWriterFactory().Create());
            ExceptionPolicy.SetExceptionManager(new ExceptionPolicyFactory().CreateManager(), false);
            // Bsp.: ExceptionPolicy.HandleException(ex, "Policy");

            Console.WriteLine("Scanner Gestartet");
            JgLog.Set(null, "Programm wird gestartet!", JgLog.LogArt.Info);

            var pr = Properties.Settings.Default;

            var jgOpt = new JgOptionen()
            {
                IdStandort = pr.IdStandort,
            };

            // Bediener und Maschine local laden, danach mit Server abgeleichen

            var init = new JgInit(jgOpt);

            init.BedienerLocalLaden();
            init.MaschinenLocalLaden();

            try
            {
                using (var dienst = new ServiceRef.WcfServiceClient())
                {
                    var tt = dienst.WcfTest("OK?");

                    if (tt == "OK?")
                    {
                        JgLog.Set(null, "Verbindung Server OK!", JgLog.LogArt.Info);

                        if (init.BedienerVonServer(dienst))
                        {
                            init.BedienerLocalSpeichern();
                        }

                        if (init.MaschinenVonServer(dienst))
                        {
                            init.MaschinenLocalSpeichern();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                ExceptionPolicy.HandleException(ex, "Policy");
            }

            // Status Maschinen laden, wenn vorhanden

            foreach (var maStatus in jgOpt.ListeMaschinen.Values)
            {
                JgMaschinenStatus.LoadStatusMaschineLocal(maStatus, jgOpt.PfadDaten);
            }

            // Optionen für jedes Craddel laden

            var listeCraddleOpt = new List <JgOptionenCraddle>();

            for (int i = 0; i < 5; i++)
            {
                var s    = Properties.Settings.Default["Craddel_" + i.ToString()].ToString();
                var crad = new JgOptionenCraddle(jgOpt);
                Helper.PropStringInOnjekt <JgOptionenCraddle>(crad, s);
                if (crad.CraddleIpAdresse != "")
                {
                    listeCraddleOpt.Add(crad);
                }
            }

#if DEBUG
            var lTaskMaschine = new List <JgScannerMaschinen>();

            foreach (var crad in listeCraddleOpt)
            {
                var sm = new JgScannerMaschinen();
                sm.TaskScannerMaschineStarten(crad);
                lTaskMaschine.Add(sm);
            }

            var datenZumServer = new JgDatenZumServer(jgOpt);
            datenZumServer.DatenabgleichStarten();

            Console.WriteLine("Fertig");
            Console.ReadKey();
#else
            var ServiceToRun = new ServiceBase[] { new JgMaschineServiceScanner(scOptionen) };
            ServiceBase.Run(ServiceToRun);
#endif
        }
コード例 #2
0
        public void TaskScannerMaschineStarten(JgOptionenCraddle CraddelOptionen)
        {
            var ctScannerMaschine = CraddelOptionen.JgOpt.CraddelTokensSource.Token;

            TaskScannerMaschine = new Task((optCraddel) =>
            {
                var optCrad        = (JgOptionenCraddle)optCraddel;
                var auswertScanner = new JgScannerAuswertung(optCrad);

                var msg                 = "";
                TcpClient client        = null;
                NetworkStream netStream = null;

                while (true)
                {
                    JgLog.Set(null, $"Verbindungsaufbau {optCrad.Info}", JgLog.LogArt.Info);

                    if (!Helper.IstPingOk(optCrad.CraddleIpAdresse, out msg))
                    {
                        JgLog.Set(null, $"Ping Fehler {optCrad.Info}\nGrund: {msg}", JgLog.LogArt.Info);
                        Thread.Sleep(20000);
                        continue;
                    }

                    try
                    {
                        client = new TcpClient(optCrad.CraddleIpAdresse, optCrad.CraddlePort);
                    }
                    catch (Exception ex)
                    {
                        JgLog.Set(null, $"Fehler Verbindungsaufbau {optCrad.Info}\nGrund: {ex.Message}", JgLog.LogArt.Info);
                        Thread.Sleep(30000);
                        continue;
                    }

                    JgLog.Set(null, $"Verbindung Ok {optCrad.Info}", JgLog.LogArt.Info);
                    netStream = client.GetStream();

                    while (true)
                    {
                        var ctsScanner = new CancellationTokenSource();
                        var ctPing     = ctsScanner.Token;

                        // Wenn dieser Task eher als Scanner beendet wird, liegt ein Verbindungsfehler vor;

                        var taskKontrolle = Task.Factory.StartNew((CraddelIpAdresse) =>
                        {
                            var ipCraddle = (string)CraddelIpAdresse;

                            while (true)
                            {
                                if (ctPing.IsCancellationRequested)
                                {
                                    break;
                                }
                                Thread.Sleep(30000);
                                if (ctPing.IsCancellationRequested)
                                {
                                    break;
                                }

                                if (!Helper.IstPingOk(ipCraddle, out msg))
                                {
                                    break;
                                }

                                JgLog.Set(null, $"Ping {ipCraddle} Ok.", JgLog.LogArt.Unbedeutend);
                            }
                        }, optCrad.CraddleIpAdresse, ctPing);

                        var ctScanner = ctsScanner.Token;

                        var taskScannen = Task.Factory.StartNew <string>((nStream) =>
                        {
                            var nStr = (NetworkStream)netStream;

                            byte[] bufferEmpfang = new byte[4096];
                            int anzZeichen       = 0;

                            try
                            {
                                anzZeichen = nStr.Read(bufferEmpfang, 0, bufferEmpfang.Length);
                            }
                            catch (Exception ex)
                            {
                                if (!ctScanner.IsCancellationRequested)
                                {
                                    var letzteZeichen = Encoding.ASCII.GetString(bufferEmpfang, 0, anzZeichen);
                                    JgLog.Set(null, $"Fehler Datenempfang {optCrad.Info}!\nLetzter Text: {letzteZeichen}\nGrund: {ex.Message}", JgLog.LogArt.Warnung);
                                    return(optCrad.TextBeiFehler);
                                }
                            }

                            return(Encoding.ASCII.GetString(bufferEmpfang, 0, anzZeichen));
                        }, netStream, ctScanner);

                        Task.WaitAny(new Task[] { taskKontrolle, taskScannen });
                        ctsScanner.Cancel();

                        if (taskScannen.IsCompleted)
                        {
                            var textEmpfangen = taskScannen.Result;

                            if (textEmpfangen == optCrad.TextBeiFehler)
                            {
                                JgLog.Set(null, $"{optCrad.Info} -> Fehlertext angesprochen.", JgLog.LogArt.Warnung);
                            }
                            else if (textEmpfangen.Length == 1)
                            {
                                JgLog.Set(null, $"{optCrad.Info} -> Ein Zeichen Empfangen: {Convert.ToByte(textEmpfangen[0])}", JgLog.LogArt.Warnung);
                            }
                            else if (textEmpfangen.Length < 1)
                            {
                                JgLog.Set(null, $"{optCrad.Info} -> Leeres Zeichen Empfangen!", JgLog.LogArt.Warnung);
                            }
                            else
                            {
                                if (textEmpfangen.Contains(optCrad.TextVerbinungOk))
                                {
                                    JgLog.Set(null, $"Verbindung Craddle OK ! {textEmpfangen}", JgLog.LogArt.Info);
                                }
                                else
                                {
                                    var ergScanner = auswertScanner.TextEmpfangen(taskScannen.Result);
                                    netStream.Write(ergScanner.AusgabeAufCraddle, 0, ergScanner.AusgabeAufCraddle.Length);
                                }
                                continue;
                            }
                        }
                        try
                        {
                            JgLog.Set(null, $"Abbruch {optCrad.Info}!", JgLog.LogArt.Warnung);

                            if (client != null)
                            {
                                if (client.Connected)
                                {
                                    client.Close();
                                }
                                client.Dispose();
                            }
                            client = null;
                            if (netStream != null)
                            {
                                netStream.Close();
                                netStream.Dispose();
                            }
                            netStream = null;
                        }
                        catch { };

                        break;
                    }
                }
            }, CraddelOptionen, ctScannerMaschine, TaskCreationOptions.LongRunning);

            TaskScannerMaschine.Start();
        }
コード例 #3
0
 public JgScannerAuswertung(JgOptionenCraddle CraddelOptionen)
 {
     _JgOpt = CraddelOptionen;
 }