safedispatch-mobile/libSafeMobile/src/main/java/com/safemobile/services/TCPmsgParser.java

409 lines
12 KiB
Java
Raw Normal View History

2022-03-14 09:53:00 +00:00
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;
2022-03-30 09:52:38 +00:00
public class TCPmsgParser implements Runnable {
2022-03-14 09:53:00 +00:00
public boolean run = true;
private TCPmsg _msg;
2022-03-30 09:52:38 +00:00
private static final List<ITCPListener> _listeners = new ArrayList<>();
2022-03-14 09:53:00 +00:00
private Thread TCPmsgParserThread;
2022-03-30 09:52:38 +00:00
public TCPmsgParser() {
2022-03-14 09:53:00 +00:00
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();
}
2022-03-30 09:52:38 +00:00
2022-03-14 09:53:00 +00:00
private synchronized void _fireLoginEvent() {
TCPEvent event = new TCPEvent( this, _msg );
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.onLoginReceived(event);
2022-03-14 09:53:00 +00:00
}
}
private synchronized void _fireGPSEvent() {
TCPEvent event = new TCPEvent( this, _msg );
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.onGPSReceived(event);
2022-03-14 09:53:00 +00:00
}
}
private synchronized void _fireSMSEvent() {
TCPEvent event = new TCPEvent( this, _msg );
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.onSMSReceived(event);
2022-03-14 09:53:00 +00:00
}
}
private synchronized void _fireLastSMSEvent() {
TCPEvent event = new TCPEvent( this, _msg );
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.onLastSMSsReceived(event);
2022-03-14 09:53:00 +00:00
}
}
private synchronized void _fireVehEvent() {
TCPEvent event = new TCPEvent( this, _msg );
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.onVehiclesReceived(event);
2022-03-14 09:53:00 +00:00
}
}
private synchronized void _fireNewSMS() {
TCPEvent event = new TCPEvent( this, _msg );
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.onNewSMSReceived(event);
2022-03-14 09:53:00 +00:00
}
}
private synchronized void _fireSMSconfirm() {
TCPEvent event = new TCPEvent( this, _msg );
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.onSMSAckReceived(event);
2022-03-14 09:53:00 +00:00
}
}
private synchronized void _fireLastPos() {
TCPEvent event = new TCPEvent( this, _msg );
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.onLastPositionsReceived(event);
2022-03-14 09:53:00 +00:00
}
}
private synchronized void _fireRadioEvent() {
TCPEvent event = new TCPEvent( this, _msg );
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.onRadioMsgReceived(event);
2022-03-14 09:53:00 +00:00
}
}
private synchronized void _fireHistPos() {
TCPEvent event = new TCPEvent( this, _msg );
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.onHistoryPositionsReceived(event);
2022-03-14 09:53:00 +00:00
}
}
private synchronized void _fireHistCount() {
TCPEvent event = new TCPEvent( this, _msg );
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.onHistoryPositionsCountReceived(event);
2022-03-14 09:53:00 +00:00
}
}
private synchronized void _fireAlarmList() {
TCPEvent event = new TCPEvent( this, _msg );
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.onAlarmsReceived(event);
2022-03-14 09:53:00 +00:00
}
}
private synchronized void _fireAlarmACK() {
TCPEvent event = new TCPEvent( this, _msg );
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.onAlarmAckReceived(event);
2022-03-14 09:53:00 +00:00
}
}
private synchronized void _fireAlarmLive() {
TCPEvent event = new TCPEvent( this, _msg );
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.alarmLiveReceived(event);
2022-03-14 09:53:00 +00:00
}
}
private synchronized void _fireRecordList() {
TCPEvent event = new TCPEvent( this, _msg );
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.onRecordingsListReceived(event);
2022-03-14 09:53:00 +00:00
}
}
private synchronized void _fireRecordPlay() {
TCPEvent event = new TCPEvent( this, _msg );
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.onRecordingPlayReceived(event);
2022-03-14 09:53:00 +00:00
}
}
private synchronized void _firePOLLEvent() {
TCPEvent event = new TCPEvent( this, _msg );
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.onPollReceived(event);
2022-03-14 09:53:00 +00:00
}
}
private synchronized void _fireConnectionReplyEvent() {
TCPEvent event = new TCPEvent( this, _msg );
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.onConnectionReplyReceived(event);
2022-03-14 09:53:00 +00:00
}
}
private synchronized void _fireContactsReceivedEvent() {
TCPEvent event = new TCPEvent( this, _msg );
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.onContactsListReceived(event);
2022-03-14 09:53:00 +00:00
}
}
private synchronized void _fireRecordingsReceivedEvent() {
TCPEvent event = new TCPEvent( this, _msg );
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.onRecordingsListReceived(event);
2022-03-14 09:53:00 +00:00
}
}
private synchronized void _fireTextMessagesReceivedEvent() {
TCPEvent event = new TCPEvent( this, _msg );
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.onTextMessagesListReceived(event);
2022-03-14 09:53:00 +00:00
}
}
private synchronized void _fireRecordingPlayReceivedEvent() {
TCPEvent event = new TCPEvent( this, _msg );
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.onRecordingPlayReceived(event);
2022-03-14 09:53:00 +00:00
}
}
public static synchronized void _fireTCPConnectionDownEvent(boolean previuosWasConnectionUp) {
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.onTCPConnectionDown(previuosWasConnectionUp);
2022-03-14 09:53:00 +00:00
}
}
public static synchronized void _fireTCPConnectionUpEvent(boolean previuosWasConnectionUp) {
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.onTCPConnectionUp(previuosWasConnectionUp);
2022-03-14 09:53:00 +00:00
}
}
public static synchronized void _fireonTCPConnectionStatusEvent(boolean isConnectionUp, boolean previuosWasConnectionUp) {
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.onTCPConnectionStatusReceived(isConnectionUp, previuosWasConnectionUp);
2022-03-14 09:53:00 +00:00
}
}
public static synchronized void _firePONGReceivedEvent() {
2022-03-30 09:52:38 +00:00
for (ITCPListener listener : _listeners) {
listener.onPONGReceived();
2022-03-14 09:53:00 +00:00
}
}
@Override
2022-03-30 09:52:38 +00:00
public void run() {
while(run) {
2022-03-14 09:53:00 +00:00
sleep(1);
2022-03-30 09:52:38 +00:00
if (TCPhandler.msgList == null)
2022-03-14 09:53:00 +00:00
continue;
2022-03-30 09:52:38 +00:00
if(!TCPhandler.msgList.isEmpty()) {
2022-04-08 15:25:53 +00:00
try {
2022-03-14 09:53:00 +00:00
_msg = TCPhandler.msgList.poll();
if(_msg == null)
continue;
2022-03-30 09:52:38 +00:00
if(!_msg.OK)
2022-03-14 09:53:00 +00:00
continue;
//parse the rest of the message;
2022-04-08 15:25:53 +00:00
2022-03-14 09:53:00 +00:00
switch(_msg.opCode)
{
2022-04-08 14:54:45 +00:00
case 40: /* login */{
_fireLoginEvent();
break;
}
case 41: /* vehicle */ {
_fireVehEvent();
break;
}
2022-04-08 15:25:53 +00:00
2022-04-08 14:54:45 +00:00
case 42: /* Text Message */{
_fireSMSEvent();
break;
}
2022-04-08 15:25:53 +00:00
2022-04-08 14:54:45 +00:00
case 43: /* Last text message */ {
_fireLastSMSEvent();
break;
}
2022-03-30 09:52:38 +00:00
case OperationCodes.TM_ACK:
case OperationCodes.TM_ACK_SD: {
2022-04-08 14:54:45 +00:00
_fireSMSconfirm();
break;
}
case OperationCodes.RECEIVED_TM:{
_fireNewSMS();
break;
}
case 45: /* last position */ {
_fireLastPos();
break;
}
case 131: /* gps */ {
_fireGPSEvent();
break;
}
case 231: /* pool */ {
_firePOLLEvent();
break;
}
2022-04-08 15:25:53 +00:00
2022-04-08 14:54:45 +00:00
case 50: /* radio */ {
_fireRadioEvent();
break;
}
2022-03-30 09:52:38 +00:00
case 46:{
2022-04-08 14:54:45 +00:00
_fireHistPos();
break;
}
case 86:{
_fireHistCount();
break;
}
2022-04-08 15:25:53 +00:00
2022-04-08 14:54:45 +00:00
case 47: /* alert list */ {
_fireAlarmList();
break;
}
2022-04-08 15:25:53 +00:00
2022-04-08 14:54:45 +00:00
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;
}
2022-03-14 09:53:00 +00:00
2022-04-08 14:54:45 +00:00
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;
2022-04-08 15:25:53 +00:00
2022-03-30 09:52:38 +00:00
}
2022-04-08 15:25:53 +00:00
}
catch(Exception ex) {
2022-03-30 09:52:38 +00:00
try {
if(TCPhandler.msgList.size() > 0)
_msg = TCPhandler.msgList.remove(0);
} catch(NoSuchElementException exe) {
SM.Exception("TCP msg Parser", "NoSuchElementException");
}
}
}
2022-04-08 14:54:45 +00:00
}
2022-04-08 15:25:53 +00:00
2022-03-14 09:53:00 +00:00
SM.Debug("TCPmsgParser listen thread stoped.");
}
private void sleep(int miliseconds) {
try {
Thread.sleep(miliseconds);
2022-03-30 09:52:38 +00:00
} catch (InterruptedException ignored) { }
2022-03-14 09:53:00 +00:00
}
public void clearMsgList()
{
TCPhandler.msgList.clear();
}
2022-03-30 09:52:38 +00:00
public void Stop() {
2022-03-14 09:53:00 +00:00
run = false;
// stop thread
2022-03-30 09:52:38 +00:00
if(TCPmsgParserThread != null) {
2022-03-14 09:53:00 +00:00
Thread moribund = TCPmsgParserThread;
TCPmsgParserThread = null;
moribund.interrupt();
}
SM.Debug("Stoping TCPmsgParser");
}
2022-03-30 09:52:38 +00:00
}