409 lines
12 KiB
Java
409 lines
12 KiB
Java
package com.safemobile.services;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.NoSuchElementException;
|
|
|
|
import com.safemobile.interfaces.ITCPListener;
|
|
import com.safemobile.interfaces.TCPEvent;
|
|
import com.safemobile.lib.OperationCodes;
|
|
import com.safemobile.lib.SM;
|
|
import com.safemobile.lib.TCPmsg;
|
|
|
|
|
|
public class TCPmsgParser implements Runnable {
|
|
|
|
public boolean run = true;
|
|
private TCPmsg _msg;
|
|
private static final List<ITCPListener> _listeners = new ArrayList<>();
|
|
private Thread TCPmsgParserThread;
|
|
|
|
public TCPmsgParser() {
|
|
TCPmsgParserThread = new Thread(this, "TCPmsgParserThread");
|
|
TCPmsgParserThread.start(); // (2) Start the thread.
|
|
}
|
|
|
|
public synchronized void addTCPListener( ITCPListener l ) {
|
|
_listeners.add( l );
|
|
}
|
|
|
|
public synchronized void removeTCPListener( ITCPListener l ) {
|
|
_listeners.remove( l );
|
|
}
|
|
|
|
public synchronized void clearITCPListeners() {
|
|
_listeners.clear();
|
|
}
|
|
|
|
private synchronized void _fireLoginEvent() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.onLoginReceived(event);
|
|
}
|
|
}
|
|
private synchronized void _fireGPSEvent() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.onGPSReceived(event);
|
|
}
|
|
}
|
|
private synchronized void _fireSMSEvent() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.onSMSReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireLastSMSEvent() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.onLastSMSsReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireVehEvent() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.onVehiclesReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireNewSMS() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.onNewSMSReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireSMSconfirm() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.onSMSAckReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireLastPos() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.onLastPositionsReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireRadioEvent() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.onRadioMsgReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireHistPos() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.onHistoryPositionsReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireHistCount() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.onHistoryPositionsCountReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireAlarmList() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.onAlarmsReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireAlarmACK() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.onAlarmAckReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireAlarmLive() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.alarmLiveReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireRecordList() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.onRecordingsListReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireRecordPlay() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.onRecordingPlayReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _firePOLLEvent() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.onPollReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireConnectionReplyEvent() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.onConnectionReplyReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireContactsReceivedEvent() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.onContactsListReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireRecordingsReceivedEvent() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.onRecordingsListReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireTextMessagesReceivedEvent() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.onTextMessagesListReceived(event);
|
|
}
|
|
}
|
|
|
|
|
|
private synchronized void _fireRecordingPlayReceivedEvent() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.onRecordingPlayReceived(event);
|
|
}
|
|
}
|
|
|
|
|
|
public static synchronized void _fireTCPConnectionDownEvent(boolean previuosWasConnectionUp) {
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.onTCPConnectionDown(previuosWasConnectionUp);
|
|
}
|
|
}
|
|
|
|
public static synchronized void _fireTCPConnectionUpEvent(boolean previuosWasConnectionUp) {
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.onTCPConnectionUp(previuosWasConnectionUp);
|
|
}
|
|
}
|
|
|
|
|
|
public static synchronized void _fireonTCPConnectionStatusEvent(boolean isConnectionUp, boolean previuosWasConnectionUp) {
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.onTCPConnectionStatusReceived(isConnectionUp, previuosWasConnectionUp);
|
|
}
|
|
}
|
|
|
|
public static synchronized void _firePONGReceivedEvent() {
|
|
for (ITCPListener listener : _listeners) {
|
|
listener.onPONGReceived();
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
public void run() {
|
|
while(run) {
|
|
sleep(1);
|
|
|
|
if (TCPhandler.msgList == null)
|
|
continue;
|
|
if(!TCPhandler.msgList.isEmpty()) {
|
|
|
|
try {
|
|
_msg = TCPhandler.msgList.poll();
|
|
if(_msg == null)
|
|
continue;
|
|
if(!_msg.OK)
|
|
continue;
|
|
//parse the rest of the message;
|
|
|
|
|
|
switch(_msg.opCode)
|
|
{
|
|
case 40: /* login */{
|
|
_fireLoginEvent();
|
|
break;
|
|
}
|
|
|
|
case 41: /* vehicle */ {
|
|
_fireVehEvent();
|
|
break;
|
|
}
|
|
|
|
|
|
case 42: /* Text Message */{
|
|
_fireSMSEvent();
|
|
break;
|
|
}
|
|
|
|
|
|
case 43: /* Last text message */ {
|
|
_fireLastSMSEvent();
|
|
break;
|
|
}
|
|
|
|
|
|
case OperationCodes.TM_ACK:
|
|
case OperationCodes.TM_ACK_SD: {
|
|
_fireSMSconfirm();
|
|
break;
|
|
}
|
|
|
|
case OperationCodes.RECEIVED_TM:{
|
|
_fireNewSMS();
|
|
break;
|
|
}
|
|
|
|
case 45: /* last position */ {
|
|
_fireLastPos();
|
|
break;
|
|
}
|
|
|
|
case 131: /* gps */ {
|
|
_fireGPSEvent();
|
|
break;
|
|
}
|
|
|
|
case 231: /* pool */ {
|
|
_firePOLLEvent();
|
|
break;
|
|
}
|
|
|
|
|
|
case 50: /* radio */ {
|
|
_fireRadioEvent();
|
|
break;
|
|
}
|
|
|
|
case 46:{
|
|
_fireHistPos();
|
|
break;
|
|
}
|
|
|
|
case 86:{
|
|
_fireHistCount();
|
|
break;
|
|
}
|
|
|
|
|
|
case 47: /* alert list */ {
|
|
_fireAlarmList();
|
|
break;
|
|
}
|
|
|
|
|
|
case 48: /* alert ack */ {
|
|
_fireAlarmACK();
|
|
break;
|
|
}
|
|
|
|
case 49:{
|
|
_fireRecordList();
|
|
break;
|
|
}
|
|
|
|
case 38:{
|
|
_fireRecordPlay();
|
|
break;
|
|
}
|
|
|
|
case 135:
|
|
case 136:
|
|
case 137:
|
|
case 138:
|
|
case 140:{
|
|
_fireAlarmLive();
|
|
break;
|
|
}
|
|
|
|
case OperationCodes.PONG: {
|
|
//_firePONGReceivedEvent();
|
|
break;
|
|
}
|
|
|
|
case OperationCodes.CONNECTION_REP: {
|
|
_fireConnectionReplyEvent();
|
|
break;
|
|
}
|
|
|
|
case OperationCodes.CONTACTS_REP: {
|
|
sleep(15);
|
|
_fireContactsReceivedEvent();
|
|
break;
|
|
}
|
|
|
|
case OperationCodes.TM_LIST_REP: {
|
|
_fireTextMessagesReceivedEvent();
|
|
break;
|
|
}
|
|
|
|
case OperationCodes.RECORDINGS_LIST_REP: {
|
|
_fireRecordingsReceivedEvent();
|
|
break;
|
|
}
|
|
|
|
case OperationCodes.RECORDING_REP: {
|
|
_fireRecordingPlayReceivedEvent();
|
|
break;
|
|
}
|
|
|
|
default:
|
|
break;
|
|
|
|
}
|
|
}
|
|
catch(Exception ex) {
|
|
try {
|
|
if(TCPhandler.msgList.size() > 0)
|
|
_msg = TCPhandler.msgList.remove(0);
|
|
} catch(NoSuchElementException exe) {
|
|
SM.Exception("TCP msg Parser", "NoSuchElementException");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
SM.Debug("TCPmsgParser listen thread stoped.");
|
|
}
|
|
|
|
private void sleep(int miliseconds) {
|
|
try {
|
|
Thread.sleep(miliseconds);
|
|
} catch (InterruptedException ignored) { }
|
|
}
|
|
|
|
public void clearMsgList()
|
|
{
|
|
TCPhandler.msgList.clear();
|
|
}
|
|
|
|
public void Stop() {
|
|
run = false;
|
|
// stop thread
|
|
if(TCPmsgParserThread != null) {
|
|
Thread moribund = TCPmsgParserThread;
|
|
TCPmsgParserThread = null;
|
|
moribund.interrupt();
|
|
}
|
|
SM.Debug("Stoping TCPmsgParser");
|
|
}
|
|
} |