Remove old unused code
Этот коммит содержится в:
@@ -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<String> 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<String>();
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -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<Void, Void, Boolean>() {
|
|
||||||
|
|
||||||
@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<String, Void, Boolean>() {
|
|
||||||
|
|
||||||
@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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -15,11 +15,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.traccar.client;
|
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.location.Location;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
|
||||||
@@ -41,53 +36,5 @@ public class ProtocolFormatter {
|
|||||||
return builder.build().toString();
|
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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user