001package var.web.ws.datasensor;
002
003import java.io.IOException;
004import java.util.Date;
005import java.util.Random;
006
007import javax.websocket.EncodeException;
008import javax.websocket.RemoteEndpoint;
009import javax.websocket.Session;
010
011public class SensorSimulator extends Thread {
012        private Session session;
013        private Random random;
014        private double messwert;
015
016        public SensorSimulator(Session session) {
017                super();
018                this.session = session;
019                random = new Random();
020                messwert = 100.0;
021        }
022
023        public void notifyClient() throws IOException {
024                RemoteEndpoint.Basic client = session.getBasicRemote();
025                Messung messung = new Messung();
026                messung.setObservation(messwert);
027                messung.setSensor("Sensor XYZ");
028                messung.setUnit(Messung.Unit.degreeCentigrade);
029                messung.setWhen(new Date());
030                messung.setWhere(new Messung.Place(49.5121, 8.5316));
031                try {
032                        client.sendObject(messung);
033                } catch (EncodeException e) {
034                        e.printStackTrace(System.err);
035                }
036        }
037
038        @Override
039        public void run() {
040                try {
041                        while (session != null && session.isOpen()) {
042                                sleep(random.nextInt(1000));
043                                if (random.nextBoolean()) {
044                                        messwert += 0.1;
045                                } else {
046                                        messwert -= 0.1;
047                                }
048                                notifyClient();
049                        }
050                } catch (InterruptedException | IOException e) {
051                        e.printStackTrace();
052                }
053        }
054}