459 lines
12 KiB
Java
459 lines
12 KiB
Java
package com.safemobile.services;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Iterator;
|
|
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 List<ITCPListener> _listeners = new ArrayList<ITCPListener>();
|
|
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();
|
|
}
|
|
|
|
public int getListenersSize()
|
|
{
|
|
return _listeners.size();
|
|
}
|
|
|
|
private synchronized void _fireLoginEvent() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next() ).onLoginReceived( event );
|
|
}
|
|
}
|
|
private synchronized void _fireGPSEvent() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next() ).onGPSReceived(event);
|
|
}
|
|
}
|
|
private synchronized void _fireSMSEvent() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next() ).onSMSReceived( event );
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireLastSMSEvent() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next() ).onLastSMSsReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireVehEvent() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next() ).onVehiclesReceived( event );
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireNewSMS() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next() ).onNewSMSReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireSMSconfirm() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next() ).onSMSAckReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireLastPos() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next() ).onLastPositionsReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireRadioEvent() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next() ).onRadioMsgReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireHistPos() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next() ).onHistoryPositionsReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireHistCount() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next() ).onHistoryPositionsCountReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireAlarmList() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next() ).onAlarmsReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireAlarmACK() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next() ).onAlarmAckReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireAlarmLive() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next() ).alarmLiveReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireRecordList() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next()).onRecordingsListReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireRecordPlay() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next()).onRecordingPlayReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _firePOLLEvent() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next()).onPollReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireConnectionReplyEvent() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next()).onConnectionReplyReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireContactsReceivedEvent() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next()).onContactsListReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireRecordingsReceivedEvent() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next()).onRecordingsListReceived(event);
|
|
}
|
|
}
|
|
|
|
private synchronized void _fireTextMessagesReceivedEvent() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next()).onTextMessagesListReceived(event);
|
|
}
|
|
}
|
|
|
|
|
|
private synchronized void _fireRecordingPlayReceivedEvent() {
|
|
TCPEvent event = new TCPEvent( this, _msg );
|
|
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next()).onRecordingPlayReceived(event);
|
|
}
|
|
}
|
|
|
|
|
|
public static synchronized void _fireTCPConnectionDownEvent(boolean previuosWasConnectionUp) {
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next()).onTCPConnectionDown(previuosWasConnectionUp);
|
|
}
|
|
}
|
|
|
|
public static synchronized void _fireTCPConnectionUpEvent(boolean previuosWasConnectionUp) {
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next()).onTCPConnectionUp(previuosWasConnectionUp);
|
|
}
|
|
}
|
|
|
|
|
|
public static synchronized void _fireonTCPConnectionStatusEvent(boolean isConnectionUp, boolean previuosWasConnectionUp) {
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next()).onTCPConnectionStatusReceived(isConnectionUp, previuosWasConnectionUp);
|
|
}
|
|
}
|
|
|
|
public static synchronized void _firePONGReceivedEvent() {
|
|
Iterator<ITCPListener> listeners = _listeners.iterator();
|
|
while( listeners.hasNext() ) {
|
|
( (ITCPListener) listeners.next()).onPONGReceived();
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
public void run()
|
|
{
|
|
while(run)
|
|
{
|
|
//SM.Debug("TCPmsgParser waiting for data...");
|
|
sleep(1);
|
|
|
|
if(TCPhandler.msgList==null)
|
|
continue;
|
|
if(!TCPhandler.msgList.isEmpty())
|
|
{
|
|
try
|
|
{
|
|
_msg = TCPhandler.msgList.poll();
|
|
if(_msg == null)
|
|
continue;
|
|
if(_msg.OK == false)
|
|
continue;
|
|
//parse the rest of the message;
|
|
|
|
switch(_msg.opCode)
|
|
{
|
|
case 40:{
|
|
_fireLoginEvent();
|
|
break;
|
|
}
|
|
|
|
case 41:{
|
|
_fireVehEvent();
|
|
break;
|
|
}
|
|
|
|
case 42:{
|
|
_fireSMSEvent();
|
|
break;
|
|
}
|
|
|
|
case 43:{
|
|
_fireLastSMSEvent();
|
|
break;
|
|
}
|
|
|
|
case OperationCodes.TM_ACK:{
|
|
_fireSMSconfirm();
|
|
break;
|
|
}
|
|
case OperationCodes.TM_ACK_SD:{
|
|
_fireSMSconfirm();
|
|
break;
|
|
}
|
|
|
|
case OperationCodes.RECEIVED_TM:{
|
|
_fireNewSMS();
|
|
break;
|
|
}
|
|
|
|
case 45:{
|
|
_fireLastPos();
|
|
break;
|
|
}
|
|
|
|
case 131:{
|
|
_fireGPSEvent();
|
|
break;
|
|
}
|
|
|
|
case 231:{
|
|
_firePOLLEvent();
|
|
break;
|
|
}
|
|
|
|
case 50:{
|
|
_fireRadioEvent();
|
|
break;
|
|
}
|
|
|
|
case 46:{
|
|
_fireHistPos();
|
|
break;
|
|
}
|
|
|
|
case 86:{
|
|
_fireHistCount();
|
|
break;
|
|
}
|
|
|
|
case 47:{
|
|
_fireAlarmList();
|
|
break;
|
|
}
|
|
|
|
case 48:{
|
|
_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");
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
/*
|
|
catch (Exception e)
|
|
{
|
|
SM.Debug("Error on fire Event:"+e.toString());
|
|
break;
|
|
}
|
|
|
|
}*/
|
|
SM.Debug("TCPmsgParser listen thread stoped.");
|
|
}
|
|
|
|
private void sleep(int miliseconds) {
|
|
try {
|
|
Thread.sleep(miliseconds);
|
|
} catch (InterruptedException e) {
|
|
}
|
|
}
|
|
|
|
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");
|
|
}
|
|
|
|
}
|