示例#1
0
        public EspServer(int boards_number, DBConnect DBConnection, Action ConnectionErrorAction, MainWind caller)
        {
            boards_number_             = boards_number;
            mainWindow                 = caller;
            tcp_listener_              = new TcpListener(IPAddress.Any, ESP_SERVER_PORT);
            board_handlers_            = new List <Thread>();
            is_running_                = false;
            this.db_connect            = DBConnection;
            this.ConnectionErrorAction = ConnectionErrorAction;
            cancellation_token_source_ = new CancellationTokenSource();

            time_sync_events_    = new ManualResetEvent[boards_number];
            packets_ready_events = new AutoResetEvent[boards_number];
            boards_status_       = new String[boards_number_];
            for (int i = 0; i < boards_number; i++)
            {
                time_sync_events_[i]    = new ManualResetEvent(false);
                packets_ready_events[i] = new AutoResetEvent(false);
                boards_status_[i]       = "Offline";
            }

            connection_handler_      = new Thread(this.connectionHandler);
            connection_handler_.Name = "ConnectionHandler";
            connection_handler_.Start();
        }
示例#2
0
 private void ActionWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
 {
     MainWind.Show();
 }
示例#3
0
        public chartDataHandler(MainWind window, int nBoards, EspServer esp_client, DBConnect dbC, CartesianChart scatterChart, CartesianChart fiveMinutesChart, Action errorAction)
        {
            _window               = window;
            _nBoards              = nBoards;
            _esp_server           = esp_client;
            _statCalc             = new StatCalc(dbC);
            _errorAction          = errorAction;
            _cts                  = new CancellationTokenSource();
            _ct                   = _cts.Token;
            this.scatterChart     = scatterChart;
            this.fiveMinutesChart = fiveMinutesChart;
            boardsPos             = new ChartValues <Scheda>();
            hiddenPhonePos        = new ChartValues <DatiDispositivo>();
            phonePos              = new ChartValues <DatiDispositivo>();
            selectedPhonePos      = new ChartValues <DatiDispositivo>();
            scatterChart.Series.Add(new ScatterSeries(boardsPos)
            {
                Title = "Schede",
                MinPointShapeDiameter = 15,
                PointGeometry         = DefaultGeometries.Triangle,
                StrokeThickness       = 4,
                Fill   = System.Windows.Media.Brushes.Transparent,
                Stroke = Utils.green
            });
            scatterChart.Series.Add(new ScatterSeries(phonePos)
            {
                Title = "Dispositivi Visibili",
                MinPointShapeDiameter = 15,
                PointGeometry         = DefaultGeometries.Diamond,
                StrokeThickness       = 4,
                Fill   = System.Windows.Media.Brushes.Transparent,
                Stroke = Utils.orange,
            });
            scatterChart.Series.Add(new ScatterSeries(hiddenPhonePos)
            {
                Title = "Dispositivi Nascosti",
                MinPointShapeDiameter = 15,
                PointGeometry         = DefaultGeometries.Diamond,
                StrokeThickness       = 4,
                Fill   = System.Windows.Media.Brushes.Transparent,
                Stroke = Utils.purple
            });

            scatterChart.Series.Add(new ScatterSeries(selectedPhonePos)
            {
                Title = "MAC selezionato",
                MinPointShapeDiameter = 20,
                PointGeometry         = DefaultGeometries.Cross,
                StrokeThickness       = 4,
                Fill   = System.Windows.Media.Brushes.Transparent,
                Stroke = Utils.red
            });

            scatterChart.AxisX.Add(new Axis
            {
                MinValue       = -2,
                MaxValue       = 2,
                LabelFormatter = x => Math.Round(x, 2).ToString(),
                Title          = "posizione [m]"
            });

            scatterChart.AxisY.Add(new Axis
            {
                MinValue       = -2,
                MaxValue       = 2,
                LabelFormatter = x => Math.Round(x, 2).ToString(),
                Title          = "posizione [m]"
            });

            InitializeFiveMinuteChart();

            Axis xAxis = new Axis();
            Axis yAxis = new Axis();

            xAxis.Separator.Step = 1;
            xAxis.FontSize       = 15;
            xAxis.Title          = "Tempo [minuti]";

            yAxis.FontSize       = 15;
            yAxis.Title          = "Numero dispositivi";
            yAxis.Separator.Step = 1;
            xAxis.MinValue       = 0;
            xAxis.MaxValue       = 5;
            yAxis.MinValue       = 0;
            yAxis.MaxValue       = 10;

            fiveMinutesChart.AxisX.Add(xAxis);
            fiveMinutesChart.AxisY.Add(yAxis);

            scatterChart.Series[0].Configuration = Mappers.Xy <Scheda>().X(b => b.Punto.Ascissa).Y(b => b.Punto.Ordinata);
            scatterChart.Series[0].Values        = boardsPos;
            scatterChart.Series[1].Configuration = Mappers.Xy <DatiDispositivo>().X(b => b.Posizione.Ascissa).Y(b => b.Posizione.Ordinata);
            scatterChart.Series[1].Values        = phonePos;
            scatterChart.Series[2].Configuration = Mappers.Xy <DatiDispositivo>().X(b => b.Posizione.Ascissa).Y(b => b.Posizione.Ordinata);
            scatterChart.Series[2].Values        = hiddenPhonePos;
            scatterChart.Series[3].Configuration = Mappers.Xy <DatiDispositivo>().X(b => b.Posizione.Ascissa).Y(b => b.Posizione.Ordinata);
            scatterChart.Series[3].Values        = selectedPhonePos;

            scatterChart.Series[0].LabelPoint = point => string.Format("ID scheda: {0}\n X:{1} Y:{2}",
                                                                       ((Scheda)point.Instance).ID_scheda,
                                                                       Math.Round(((Scheda)point.Instance).Punto.Ascissa, 2),
                                                                       Math.Round(((Scheda)point.Instance).Punto.Ordinata, 2));
            scatterChart.Series[1].LabelPoint = point => string.Format(" MAC: {0}\n Timestamp:{1} \n X:{2}  Y:{3}",
                                                                       Utils.Formatta_MAC_Address(((DatiDispositivo)point.Instance).MAC_Address),
                                                                       Utils.UnixTimestampToDateTime(((DatiDispositivo)point.Instance).Timestamp),
                                                                       Math.Round(((DatiDispositivo)point.Instance).Posizione.Ascissa, 2),
                                                                       Math.Round(((DatiDispositivo)point.Instance).Posizione.Ordinata, 2));
            scatterChart.Series[2].LabelPoint = point => string.Format(" MAC: {0}\n Timestamp:{1} \n X:{2}  Y:{3}",
                                                                       Utils.Formatta_MAC_Address(((DatiDispositivo)point.Instance).MAC_Address),
                                                                       Utils.UnixTimestampToDateTime(((DatiDispositivo)point.Instance).Timestamp),
                                                                       Math.Round(((DatiDispositivo)point.Instance).Posizione.Ascissa, 2),
                                                                       Math.Round(((DatiDispositivo)point.Instance).Posizione.Ordinata, 2));
            scatterChart.Series[3].LabelPoint = point => string.Format(" MAC: {0}\n Timestamp:{1} \n X:{2}  Y:{3}",
                                                                       Utils.Formatta_MAC_Address(((DatiDispositivo)point.Instance).MAC_Address),
                                                                       Utils.UnixTimestampToDateTime(((DatiDispositivo)point.Instance).Timestamp),
                                                                       Math.Round(((DatiDispositivo)point.Instance).Posizione.Ascissa, 2),
                                                                       Math.Round(((DatiDispositivo)point.Instance).Posizione.Ordinata, 2));


            t = new Thread(new ThreadStart(this.ReceiverFunc));
            t.Start();
        }