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 _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(); } public int getListenersSize() { return _listeners.size(); } private synchronized void _fireLoginEvent() { TCPEvent event = new TCPEvent( this, _msg ); Iterator listeners = _listeners.iterator(); while( listeners.hasNext() ) { ( (ITCPListener) listeners.next() ).onLoginReceived( event ); } } private synchronized void _fireGPSEvent() { TCPEvent event = new TCPEvent( this, _msg ); Iterator listeners = _listeners.iterator(); while( listeners.hasNext() ) { ( (ITCPListener) listeners.next() ).onGPSReceived(event); } } private synchronized void _fireSMSEvent() { TCPEvent event = new TCPEvent( this, _msg ); Iterator listeners = _listeners.iterator(); while( listeners.hasNext() ) { ( (ITCPListener) listeners.next() ).onSMSReceived( event ); } } private synchronized void _fireLastSMSEvent() { TCPEvent event = new TCPEvent( this, _msg ); Iterator listeners = _listeners.iterator(); while( listeners.hasNext() ) { ( (ITCPListener) listeners.next() ).onLastSMSsReceived(event); } } private synchronized void _fireVehEvent() { TCPEvent event = new TCPEvent( this, _msg ); Iterator listeners = _listeners.iterator(); while( listeners.hasNext() ) { ( (ITCPListener) listeners.next() ).onVehiclesReceived( event ); } } private synchronized void _fireNewSMS() { TCPEvent event = new TCPEvent( this, _msg ); Iterator listeners = _listeners.iterator(); while( listeners.hasNext() ) { ( (ITCPListener) listeners.next() ).onNewSMSReceived(event); } } private synchronized void _fireSMSconfirm() { TCPEvent event = new TCPEvent( this, _msg ); Iterator listeners = _listeners.iterator(); while( listeners.hasNext() ) { ( (ITCPListener) listeners.next() ).onSMSAckReceived(event); } } private synchronized void _fireLastPos() { TCPEvent event = new TCPEvent( this, _msg ); Iterator listeners = _listeners.iterator(); while( listeners.hasNext() ) { ( (ITCPListener) listeners.next() ).onLastPositionsReceived(event); } } private synchronized void _fireRadioEvent() { TCPEvent event = new TCPEvent( this, _msg ); Iterator listeners = _listeners.iterator(); while( listeners.hasNext() ) { ( (ITCPListener) listeners.next() ).onRadioMsgReceived(event); } } private synchronized void _fireHistPos() { TCPEvent event = new TCPEvent( this, _msg ); Iterator listeners = _listeners.iterator(); while( listeners.hasNext() ) { ( (ITCPListener) listeners.next() ).onHistoryPositionsReceived(event); } } private synchronized void _fireHistCount() { TCPEvent event = new TCPEvent( this, _msg ); Iterator listeners = _listeners.iterator(); while( listeners.hasNext() ) { ( (ITCPListener) listeners.next() ).onHistoryPositionsCountReceived(event); } } private synchronized void _fireAlarmList() { TCPEvent event = new TCPEvent( this, _msg ); Iterator listeners = _listeners.iterator(); while( listeners.hasNext() ) { ( (ITCPListener) listeners.next() ).onAlarmsReceived(event); } } private synchronized void _fireAlarmACK() { TCPEvent event = new TCPEvent( this, _msg ); Iterator listeners = _listeners.iterator(); while( listeners.hasNext() ) { ( (ITCPListener) listeners.next() ).onAlarmAckReceived(event); } } private synchronized void _fireAlarmLive() { TCPEvent event = new TCPEvent( this, _msg ); Iterator listeners = _listeners.iterator(); while( listeners.hasNext() ) { ( (ITCPListener) listeners.next() ).alarmLiveReceived(event); } } private synchronized void _fireRecordList() { TCPEvent event = new TCPEvent( this, _msg ); Iterator listeners = _listeners.iterator(); while( listeners.hasNext() ) { ( (ITCPListener) listeners.next()).onRecordingsListReceived(event); } } private synchronized void _fireRecordPlay() { TCPEvent event = new TCPEvent( this, _msg ); Iterator listeners = _listeners.iterator(); while( listeners.hasNext() ) { ( (ITCPListener) listeners.next()).onRecordingPlayReceived(event); } } private synchronized void _firePOLLEvent() { TCPEvent event = new TCPEvent( this, _msg ); Iterator listeners = _listeners.iterator(); while( listeners.hasNext() ) { ( (ITCPListener) listeners.next()).onPollReceived(event); } } private synchronized void _fireConnectionReplyEvent() { TCPEvent event = new TCPEvent( this, _msg ); Iterator listeners = _listeners.iterator(); while( listeners.hasNext() ) { ( (ITCPListener) listeners.next()).onConnectionReplyReceived(event); } } private synchronized void _fireContactsReceivedEvent() { TCPEvent event = new TCPEvent( this, _msg ); Iterator listeners = _listeners.iterator(); while( listeners.hasNext() ) { ( (ITCPListener) listeners.next()).onContactsListReceived(event); } } private synchronized void _fireRecordingsReceivedEvent() { TCPEvent event = new TCPEvent( this, _msg ); Iterator listeners = _listeners.iterator(); while( listeners.hasNext() ) { ( (ITCPListener) listeners.next()).onRecordingsListReceived(event); } } private synchronized void _fireTextMessagesReceivedEvent() { TCPEvent event = new TCPEvent( this, _msg ); Iterator listeners = _listeners.iterator(); while( listeners.hasNext() ) { ( (ITCPListener) listeners.next()).onTextMessagesListReceived(event); } } private synchronized void _fireRecordingPlayReceivedEvent() { TCPEvent event = new TCPEvent( this, _msg ); Iterator listeners = _listeners.iterator(); while( listeners.hasNext() ) { ( (ITCPListener) listeners.next()).onRecordingPlayReceived(event); } } public static synchronized void _fireTCPConnectionDownEvent(boolean previuosWasConnectionUp) { Iterator listeners = _listeners.iterator(); while( listeners.hasNext() ) { ( (ITCPListener) listeners.next()).onTCPConnectionDown(previuosWasConnectionUp); } } public static synchronized void _fireTCPConnectionUpEvent(boolean previuosWasConnectionUp) { Iterator listeners = _listeners.iterator(); while( listeners.hasNext() ) { ( (ITCPListener) listeners.next()).onTCPConnectionUp(previuosWasConnectionUp); } } public static synchronized void _fireonTCPConnectionStatusEvent(boolean isConnectionUp, boolean previuosWasConnectionUp) { Iterator listeners = _listeners.iterator(); while( listeners.hasNext() ) { ( (ITCPListener) listeners.next()).onTCPConnectionStatusReceived(isConnectionUp, previuosWasConnectionUp); } } public static synchronized void _firePONGReceivedEvent() { Iterator 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"); } }