diff --git a/app/src/main/java/org/traccar/client/ClientController.java b/app/src/main/java/org/traccar/client/ClientController.java deleted file mode 100644 index 1183b9e..0000000 --- a/app/src/main/java/org/traccar/client/ClientController.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.client; - -import java.util.LinkedList; -import java.util.Queue; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.net.ConnectivityManager; -import android.os.Handler; -import android.util.Log; - - -public class ClientController implements Connection.ConnectionHandler { - - public static final long RECONNECT_DELAY = 10 * 1000; - - private Context context; - - private Handler handler; - private Queue messageQueue; - - private Connection connection; - - private String address; - private int port; - private String loginMessage; - - public ClientController(Context context, String address, int port, String loginMessage) { - this.context = context; - messageQueue = new LinkedList(); - this.address = address; - this.port = port; - this.loginMessage = loginMessage; - } - - private BroadcastReceiver connectivityListener = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - StatusActivity.addMessage(context.getString(R.string.status_connectivity_change)); - /*if (intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false)) { - handler.removeCallbacksAndMessages(null); - } else { - reconnect(); - }*/ - } - }; - - public void start() { - handler = new Handler(); - connection = new Connection(this); - connection.connect(address, port); - - IntentFilter filter = new IntentFilter(); - filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); - context.registerReceiver(connectivityListener, filter); - } - - public void stop() { - context.unregisterReceiver(connectivityListener); - - connection.close(); - handler.removeCallbacksAndMessages(null); - } - - private void reconnect() { - handler.removeCallbacksAndMessages(null); - connection.close(); - connection = new Connection(this); - connection.connect(address, port); - } - - private void delayedReconnect() { - connection.close(); - handler.postDelayed(new Runnable() { - @Override - public void run() { - connection = new Connection(ClientController.this); - connection.connect(address, port); - } - }, RECONNECT_DELAY); - } - - public void setNewServer(String address, int port) { - this.address = address; - this.port = port; - reconnect(); - } - - public void setNewLogin(String loginMessage) { - this.loginMessage = loginMessage; - reconnect(); - } - - public void setNewLocation(String locationMessage) { - messageQueue.offer(locationMessage); - if (!connection.isClosed() && !connection.isBusy()) { - connection.send(messageQueue.poll()); - } - } - - @Override - public void onConnected(boolean result) { - if (result) { - StatusActivity.addMessage(context.getString(R.string.status_connection_success)); - connection.send(loginMessage); - } else { - StatusActivity.addMessage(context.getString(R.string.status_connection_fail)); - delayedReconnect(); - } - } - - @Override - public void onSent(boolean result) { - if (result) { - if (!messageQueue.isEmpty()) { - connection.send(messageQueue.poll()); - } - } else { - StatusActivity.addMessage(context.getString(R.string.status_send_fail)); - delayedReconnect(); - } - } - -} diff --git a/app/src/main/java/org/traccar/client/Connection.java b/app/src/main/java/org/traccar/client/Connection.java deleted file mode 100644 index a2a3c4b..0000000 --- a/app/src/main/java/org/traccar/client/Connection.java +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright 2012 - 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.client; - -import java.io.Closeable; -import java.io.OutputStream; -import java.net.InetSocketAddress; -import java.net.Socket; - -import android.os.AsyncTask; -import android.util.Log; - -/** - * Asynchronous connection - * - * All methods should be called from UI thread only. - */ -public class Connection implements Closeable { - - public static final String LOG_TAG = "Traccar.Connection"; - public static final int SOCKET_TIMEOUT = 10 * 1000; - - /** - * Callback interface - */ - public interface ConnectionHandler { - void onConnected(boolean result); - void onSent(boolean result); - } - - private ConnectionHandler handler; - - private Socket socket; - private OutputStream socketStream; - - private boolean closed; - private boolean busy; - - public boolean isClosed() { - return closed; - } - - public boolean isBusy() { - return busy; - } - - public Connection(ConnectionHandler handler) { - this.handler = handler; - closed = false; - busy = false; - } - - public void connect(final String address, final int port) { - busy = true; - - new AsyncTask() { - - @Override - protected Boolean doInBackground(Void... params) { - try { - socket = new Socket(); - socket.connect(new InetSocketAddress(address, port)); - socket.setSoTimeout(SOCKET_TIMEOUT); - socketStream = socket.getOutputStream(); - return true; - } catch (Exception e) { - Log.w(LOG_TAG, e.getMessage()); - return false; - } - } - - @Override - protected void onCancelled() { - if (!closed) { - busy = false; - handler.onConnected(false); - } - } - - @Override - protected void onPostExecute(Boolean result) { - if (!closed) { - busy = false; - handler.onConnected(result); - } - } - - }.execute(); - - } - - public void send(String message) { - busy = true; - - new AsyncTask() { - - @Override - protected Boolean doInBackground(String... params) { - try { - socketStream.write(params[0].getBytes()); - socketStream.flush(); - return true; - } catch (Exception e) { - Log.w(LOG_TAG, e.getMessage()); - return false; - } - } - - @Override - protected void onCancelled() { - if (!closed) { - busy = false; - handler.onSent(false); - } - } - - @Override - protected void onPostExecute(Boolean result) { - if (!closed) { - busy = false; - handler.onSent(result); - } - } - - }.execute(message); - - } - - @Override - public void close() { - closed = true; - try { - if (socketStream != null) { - socketStream.close(); - } - if (socket != null) { - socket.close(); - } - } catch (Exception e) { - Log.e(LOG_TAG, e.getMessage()); - } - } - -} diff --git a/app/src/main/java/org/traccar/client/ProtocolFormatter.java b/app/src/main/java/org/traccar/client/ProtocolFormatter.java index cfe7852..a844c76 100644 --- a/app/src/main/java/org/traccar/client/ProtocolFormatter.java +++ b/app/src/main/java/org/traccar/client/ProtocolFormatter.java @@ -15,11 +15,6 @@ */ package org.traccar.client; -import java.util.Calendar; -import java.util.Formatter; -import java.util.Locale; -import java.util.TimeZone; - import android.location.Location; import android.net.Uri; @@ -41,53 +36,5 @@ public class ProtocolFormatter { return builder.build().toString(); } - /** - * Format device id message - */ - public static String createLoginMessage(String id) { - StringBuilder s = new StringBuilder("$PGID,"); - Formatter f = new Formatter(s, Locale.ENGLISH); - - s.append(id); - - byte checksum = 0; - for (byte b : s.substring(1).getBytes()) { - checksum ^= b; - } - f.format("*%02x\r\n", (int) checksum); - f.close(); - - return s.toString(); - } - - /** - * Format location message - */ - public static String createLocationMessage(Location l, double battery) { - StringBuilder s = new StringBuilder("$GPRMC,"); - Formatter f = new Formatter(s, Locale.ENGLISH); - Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"), Locale.ENGLISH); - calendar.setTimeInMillis(l.getTime()); - - f.format("%1$tH%1$tM%1$tS.%1$tL,A,", calendar); - - double lat = l.getLatitude(); - double lon = l.getLongitude(); - f.format("%02d%07.4f,%c,", (int) Math.abs(lat), Math.abs(lat) % 1 * 60, lat < 0 ? 'S' : 'N'); - f.format("%03d%07.4f,%c,", (int) Math.abs(lon), Math.abs(lon) % 1 * 60, lon < 0 ? 'W' : 'E'); - - double speed = l.getSpeed() * 1.943844; // speed in knots - f.format("%.2f,%.2f,", speed, l.getBearing()); - f.format("%1$td%1$tm%1$ty,,", calendar); - - byte checksum = 0; - for (byte b : s.substring(1).getBytes()) { - checksum ^= b; - } - f.format("*%02x\r\n", (int) checksum); - f.close(); - - return s.toString(); - } }