diff options
-rw-r--r-- | default.cfg | 3 | ||||
-rw-r--r-- | opengts.cfg | 3 | ||||
-rw-r--r-- | src/org/traccar/Server.java | 125 | ||||
-rw-r--r-- | src/org/traccar/TrackerEventHandler.java | 6 | ||||
-rw-r--r-- | src/org/traccar/model/DataManager.java | 14 |
5 files changed, 36 insertions, 115 deletions
diff --git a/default.cfg b/default.cfg index 108b827e0..9f9f8bb24 100644 --- a/default.cfg +++ b/default.cfg @@ -10,6 +10,9 @@ <entry key="database.user">sa</entry> <entry key="database.password"></entry> + <!-- Database refresh delay in seconds --> + <entry key="database.refreshDelay">300</entry> + <!--> Create database: CREATE TABLE devices (id INT, imei VARCHAR(16)) diff --git a/opengts.cfg b/opengts.cfg index ba9fb4da5..c576e70c9 100644 --- a/opengts.cfg +++ b/opengts.cfg @@ -10,6 +10,9 @@ <entry key="database.user">user</entry> <entry key="database.password">password</entry> + <!-- Database refresh delay in seconds --> + <entry key="database.refreshDelay">300</entry> + <!--> id - Integer imei - String diff --git a/src/org/traccar/Server.java b/src/org/traccar/Server.java index 0242a391b..a0506f0cb 100644 --- a/src/org/traccar/Server.java +++ b/src/org/traccar/Server.java @@ -17,29 +17,27 @@ package org.traccar; import java.io.FileInputStream; import java.io.IOException; -import java.sql.ResultSet; import java.sql.SQLException; import java.text.DateFormat; import java.text.SimpleDateFormat; -import java.util.*; -import java.util.logging.Formatter; +import java.util.Date; +import java.util.LinkedList; +import java.util.List; +import java.util.Properties; import java.util.logging.*; import org.jboss.netty.buffer.ChannelBuffers; import org.jboss.netty.channel.ChannelPipeline; import org.jboss.netty.handler.codec.frame.DelimiterBasedFrameDecoder; import org.jboss.netty.handler.codec.string.StringDecoder; import org.jboss.netty.handler.codec.string.StringEncoder; -import org.traccar.helper.AdvancedConnection; -import org.traccar.helper.NamedParameterStatement; import org.traccar.model.DataManager; -import org.traccar.model.Device; -import org.traccar.model.Position; +import org.traccar.model.DatabaseDataManager; import org.traccar.protocol.*; /** * Server */ -public class Server implements DataManager { +public class Server { /** * Server list @@ -57,8 +55,10 @@ public class Server implements DataManager { return loggerEnabled; } + private DataManager dataManager; + /** - * Init + * Initialize */ public void init(String[] arguments) throws IOException, ClassNotFoundException, SQLException { @@ -69,7 +69,8 @@ public class Server implements DataManager { properties.loadFromXML(new FileInputStream(arguments[0])); } - initDatabase(properties); + dataManager = new DatabaseDataManager(properties); + initLogger(properties); initXexunServer(properties); @@ -108,93 +109,7 @@ public class Server implements DataManager { } /** - * Database statements - */ - private NamedParameterStatement selectDevice; - private NamedParameterStatement insertPosition; - - /** - * Init database - */ - private void initDatabase(Properties properties) - throws ClassNotFoundException, SQLException { - - // Load driver - String driver = properties.getProperty("database.driver"); - if (driver != null) { - Class.forName(driver); - } - - // Connect database - String url = properties.getProperty("database.url"); - String user = properties.getProperty("database.user"); - String password = properties.getProperty("database.password"); - AdvancedConnection connection = new AdvancedConnection(url, user, password); - - String query = properties.getProperty("database.selectDevice"); - selectDevice = new NamedParameterStatement(connection, query); - - query = properties.getProperty("database.insertPosition"); - insertPosition = new NamedParameterStatement(connection, query); - } - - /** - * Devices - */ - private Map devices; - private Calendar devicesLastUpdate; - private Long devicesListRefreshDelay = new Long(5 * 60 * 1000); - - public synchronized List getDevices() throws SQLException { - - List deviceList = new LinkedList(); - - selectDevice.prepare(); - ResultSet result = selectDevice.executeQuery(); - while (result.next()) { - Device device = new Device(); - device.setId(result.getLong("id")); - device.setImei(result.getString("imei")); - deviceList.add(device); - } - - return deviceList; - } - - public Device getDeviceByImei(String imei) throws SQLException { - - if ((devices == null) || (Calendar.getInstance().getTimeInMillis() - devicesLastUpdate.getTimeInMillis() > devicesListRefreshDelay)) { - devices = new HashMap(); - List deviceList = getDevices(); - for (Object device: deviceList) { - devices.put(((Device) device).getImei(), device); - } - devicesLastUpdate = Calendar.getInstance(); - } - - return (Device) devices.get(imei); - } - - public synchronized void setPosition(Position position) throws SQLException { - - insertPosition.prepare(); - - insertPosition.setLong("device_id", position.getDeviceId()); - insertPosition.setTimestamp("time", position.getTime()); - insertPosition.setBoolean("valid", position.getValid()); - insertPosition.setDouble("altitude", position.getAltitude()); - insertPosition.setDouble("latitude", position.getLatitude()); - insertPosition.setDouble("longitude", position.getLongitude()); - insertPosition.setDouble("speed", position.getSpeed()); - insertPosition.setDouble("course", position.getCourse()); - insertPosition.setDouble("power", position.getPower()); - insertPosition.setString("extended_info", position.getExtendedInfo()); - - insertPosition.executeUpdate(); - } - - /** - * Init logger + * Initialize logger */ public void initLogger(Properties properties) throws IOException { @@ -265,7 +180,7 @@ public class Server implements DataManager { TrackerServer server = new TrackerServer(getProtocolPort(properties, protocol)); final Integer resetDelay = getProtocolResetDelay(properties, protocol); - server.setPipelineFactory(new GenericPipelineFactory(server, this, isLoggerEnabled()) { + server.setPipelineFactory(new GenericPipelineFactory(server, dataManager, isLoggerEnabled()) { protected void addSpecificHandlers(ChannelPipeline pipeline) { pipeline.addLast("frameDecoder", new XexunFrameDecoder()); pipeline.addLast("stringDecoder", new StringDecoder()); @@ -288,7 +203,7 @@ public class Server implements DataManager { TrackerServer server = new TrackerServer(getProtocolPort(properties, protocol)); final Integer resetDelay = getProtocolResetDelay(properties, protocol); - server.setPipelineFactory(new GenericPipelineFactory(server, this, isLoggerEnabled()) { + server.setPipelineFactory(new GenericPipelineFactory(server, dataManager, isLoggerEnabled()) { protected void addSpecificHandlers(ChannelPipeline pipeline) { byte delimiter[] = { (byte) ';' }; pipeline.addLast("frameDecoder", @@ -314,7 +229,7 @@ public class Server implements DataManager { TrackerServer server = new TrackerServer(getProtocolPort(properties, protocol)); final Integer resetDelay = getProtocolResetDelay(properties, protocol); - server.setPipelineFactory(new GenericPipelineFactory(server, this, isLoggerEnabled()) { + server.setPipelineFactory(new GenericPipelineFactory(server, dataManager, isLoggerEnabled()) { protected void addSpecificHandlers(ChannelPipeline pipeline) { byte delimiter[] = { (byte) ')' }; pipeline.addLast("frameDecoder", @@ -340,7 +255,7 @@ public class Server implements DataManager { TrackerServer server = new TrackerServer(getProtocolPort(properties, protocol)); final Integer resetDelay = getProtocolResetDelay(properties, protocol); - server.setPipelineFactory(new GenericPipelineFactory(server, this, isLoggerEnabled()) { + server.setPipelineFactory(new GenericPipelineFactory(server, dataManager, isLoggerEnabled()) { protected void addSpecificHandlers(ChannelPipeline pipeline) { byte delimiter[] = { (byte) 0x0 }; pipeline.addLast("frameDecoder", @@ -366,7 +281,7 @@ public class Server implements DataManager { TrackerServer server = new TrackerServer(getProtocolPort(properties, protocol)); final Integer resetDelay = getProtocolResetDelay(properties, protocol); - server.setPipelineFactory(new GenericPipelineFactory(server, this, isLoggerEnabled()) { + server.setPipelineFactory(new GenericPipelineFactory(server, dataManager, isLoggerEnabled()) { protected void addSpecificHandlers(ChannelPipeline pipeline) { byte delimiter[] = { (byte) '$' }; pipeline.addLast("frameDecoder", @@ -392,7 +307,7 @@ public class Server implements DataManager { TrackerServer server = new TrackerServer(getProtocolPort(properties, protocol)); final Integer resetDelay = getProtocolResetDelay(properties, protocol); - server.setPipelineFactory(new GenericPipelineFactory(server, this, isLoggerEnabled()) { + server.setPipelineFactory(new GenericPipelineFactory(server, dataManager, isLoggerEnabled()) { protected void addSpecificHandlers(ChannelPipeline pipeline) { byte delimiter[] = { (byte) '\r', (byte) '\n' }; pipeline.addLast("frameDecoder", @@ -418,7 +333,7 @@ public class Server implements DataManager { TrackerServer server = new TrackerServer(getProtocolPort(properties, protocol)); final Integer resetDelay = getProtocolResetDelay(properties, protocol); - server.setPipelineFactory(new GenericPipelineFactory(server, this, isLoggerEnabled()) { + server.setPipelineFactory(new GenericPipelineFactory(server, dataManager, isLoggerEnabled()) { protected void addSpecificHandlers(ChannelPipeline pipeline) { byte delimiter[] = { (byte) '\n' }; // tracker bug \n\r pipeline.addLast("frameDecoder", @@ -443,7 +358,7 @@ public class Server implements DataManager { TrackerServer server = new TrackerServer(getProtocolPort(properties, protocol)); final Integer resetDelay = getProtocolResetDelay(properties, protocol); - server.setPipelineFactory(new GenericPipelineFactory(server, this, isLoggerEnabled()) { + server.setPipelineFactory(new GenericPipelineFactory(server, dataManager, isLoggerEnabled()) { protected void addSpecificHandlers(ChannelPipeline pipeline) { byte delimiter[] = { (byte) '\r', (byte) '\n' }; pipeline.addLast("frameDecoder", diff --git a/src/org/traccar/TrackerEventHandler.java b/src/org/traccar/TrackerEventHandler.java index e6428ee36..8378dece3 100644 --- a/src/org/traccar/TrackerEventHandler.java +++ b/src/org/traccar/TrackerEventHandler.java @@ -39,9 +39,9 @@ public class TrackerEventHandler extends SimpleChannelHandler { public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) { if (e.getMessage() instanceof Position) { - + Position position = (Position) e.getMessage(); - + if (position == null) { System.out.println("null message"); } else { @@ -59,7 +59,7 @@ public class TrackerEventHandler extends SimpleChannelHandler { // Write position to database try { - dataManager.setPosition(position); + dataManager.addPosition(position); } catch (Exception error) { System.out.println(error.getMessage()); } diff --git a/src/org/traccar/model/DataManager.java b/src/org/traccar/model/DataManager.java index a7338b3c4..a7dbd6719 100644 --- a/src/org/traccar/model/DataManager.java +++ b/src/org/traccar/model/DataManager.java @@ -23,18 +23,18 @@ import java.util.List; public interface DataManager { /** - * Read device list + * Manage devices */ public List getDevices() throws Exception; - - /** - * Get device by imei - */ + public void addDevice(Device device) throws Exception; + public void addUpdate(Device device) throws Exception; + public void addRemove(Device device) throws Exception; public Device getDeviceByImei(String imei) throws Exception; /** - * Write position + * Manage positions */ - public void setPosition(Position position) throws Exception; + public List getPositions(Long deviceId) throws Exception; + public void addPosition(Position position) throws Exception; } |