safedispatch-mobile/libSafeMobile/src/main/java/com/safemobile/lib/RadioMSG.java

461 lines
10 KiB
Java

package com.safemobile.lib;
import java.util.ArrayList;
import com.safemobile.lib.radio.Channel;
import com.safemobile.lib.radio.Emerg;
import com.safemobile.lib.radio.IncCall;
import com.safemobile.lib.radio.RadioGW;
import com.safemobile.lib.radio.RadioStatus;
import com.safemobile.lib.radio.SUstatus;
import com.safemobile.lib.radio.Zone;
import com.safemobile.lib.radio.Zone_and_channel;
public class RadioMSG extends TCPmsg {
public int rOpcode;
public String payload="";
public ArrayList<RadioGW> RadioGWList = null;
//zone and channel;
public Zone_and_channel zac= null;
//radio status
public RadioStatus rStatus = null;
//SU stauts
public SUstatus suStatus = null;
//Incomming call
public IncCall incCall = null;
//Emerg
public Emerg emerg = null;
// Contacts list
public ArrayList<Contact> contacts;
public RadioMSG(TCPmsg tcp) {
super(tcp);
String date4parsing = super.data;
String[] arr = date4parsing.split("#");
rOpcode = Integer.parseInt(arr[0]);
payload = arr[1];
switch(rOpcode)
{
case 200 /* gw list */:
RadioGWList = getRadioGWList();
break;
case OperationCodes.CHANNEL_BRDCST:
zac = parse_CHANNEL_BRDCST(payload);
break;
case OperationCodes.RADIO_STATUS_REP:
rStatus = parse_RADIO_STATUS_REP(payload);
break;
case OperationCodes.UNIT_STATUS_UPDATE :
suStatus = parse_UNIT_STATUS_UPDATE(payload);
break;
case 125:
case OperationCodes.CALL_STATUS_BRDCST:
incCall = parse_CALL_STATUS_BRDCST(payload);
break;
case 121:
case 122:
case 123:
{
try {
incCall = new IncCall();
incCall.opCode = rOpcode;
incCall.callStatus = Integer.parseInt(payload.substring(payload.length()-1, payload.length()));
} catch (Exception e) {
SM.Debug("Cmd 121, 122, 123 error:"+e.toString());
}
/*
try {
System.out.println("############ tmpARR: " + payload );
incCall = new IncCall();
incCall.opCode = rOpcode;
String[] tempArr = payload.split("&");
String[] gwID_and_rgwID_imei = tempArr[0].split("/");
incCall.gwID = Integer.parseInt(gwID_and_rgwID_imei[0]);
incCall.rgwID = Integer.parseInt(gwID_and_rgwID_imei[1]);
incCall.callStatus = Integer.parseInt(tempArr[1]);
incCall.callType = Integer.parseInt(tempArr[2]);
incCall.groupId = Integer.parseInt(tempArr[3]);
} catch (Exception e) {
SM.Debug("Cmd 121, 122, 123 error:"+e.toString());
}
*/
break;
}
case 115:
case 116:
case 117:
{
try {
incCall = new IncCall();
incCall.opCode = rOpcode;
incCall.callStatus = Integer.parseInt(payload.substring(payload.length()-1, payload.length()));
} catch (Exception e) {
SM.Debug("Cmd 115,116,117 error:"+e.toString());
}
break;
/*
try {
incCall = new IncCall();
String[] tempArr = payload.split("&");
incCall.opCode = rOpcode;
String[] gwID_and_rgwID_imei = tempArr[0].split("/");
incCall.gwID = Integer.parseInt(gwID_and_rgwID_imei[0]);
incCall.rgwID = Integer.parseInt(gwID_and_rgwID_imei[1]);
incCall.callStatus = 3;
incCall.callType = Integer.parseInt(tempArr[2]);
incCall.groupId = Integer.parseInt(tempArr[3]);
} catch (Exception e) {
SM.Debug("Cmd 115, 116, 117 error:"+e.toString());
}
break;
*/
}
case OperationCodes.CALL_TYPE_REP:
incCall = parse_CALL_TYPE_REP(payload);
break;
case 172:
{
try {
incCall = new IncCall();
incCall.opCode = rOpcode;
String[] tempArr = payload.split("/");
incCall.mic = new Mic();
incCall.mic.mic_type = Integer.parseInt(tempArr[0]);
incCall.mic.signal_type = Integer.parseInt(tempArr[1]);
incCall.mic.mic_state = Integer.parseInt(tempArr[2]);
incCall.mic.mic_gain = Integer.parseInt(tempArr[3]);
SM.Debug("GOT Mic state changed", incCall.opCode + " # " + incCall.mic.mic_state);
} catch (Exception e) {
SM.Debug("Cmd 172 error:"+e.toString());
}
break;
}
case OperationCodes.EMERGENCY_REP:
emerg = parse_EMERGENCY_REP(payload);
break;
/*
case OperationCodes.CONTACTS_REP:
{
try
{
SM.Debug("Parsing Contacts");
contacts = Contact.parseTCPMsg(payload);
}
catch(Exception ex)
{
SM.Exception("Exception parse Contacts", ex.toString());
}
break;
}
*/
default:
break;
}
//SM.Debug("RadioMSG", "Done parsing");
}
private RadioGW parseRadioGW(String buffer)
{
RadioGW rgw = new RadioGW();
String[] radioFields = buffer.split("&");
if( radioFields.length > 3 ) {
rgw.ID = Integer.parseInt(radioFields[0].trim());
rgw.GW_ID = Integer.parseInt(radioFields[1].trim());
rgw.IMEI = radioFields[2];
rgw.IP = radioFields[3];
}
return rgw;
}
private Zone parseZone(String buffer)
{
Zone zone = new Zone();
String[] zoneFields = buffer.split(":");
if( zoneFields.length > 2 ) {
zone.dbID = Integer.parseInt(zoneFields[0].trim());
zone.id = Integer.parseInt(zoneFields[1].trim());
zone.ZoneName = zoneFields[2];
}
return zone;
}
private Channel parseChannel(String buffer)
{
Channel channel = new Channel();
String[] channelFields = buffer.split("/");
if( channelFields.length > 2 ) {
channel.dbID = Integer.parseInt(channelFields[0].trim());
channel.id = Integer.parseInt(channelFields[1].trim());
channel.chName = channelFields[2].trim();
}
return channel;
}
private String[] getChannelList(String zone)
{
String[] zoneArr = zone.split(":");
if ( zoneArr.length > 3)
return zoneArr[3].split(",");
return null;
}
private String[] getZoneList(String gw)
{
String[] zoneArr = gw.split("&");
if ( zoneArr.length > 4)
return zoneArr[4].split("@");
return null;
}
private ArrayList<RadioGW> getRadioGWList()
{
ArrayList<RadioGW> radioGWList = new ArrayList<RadioGW>();
String[] radioGWArr = payload.split(";");
for(int i=0; i < radioGWArr.length; i++)
{
RadioGW rgw = parseRadioGW(radioGWArr[i]);
String[] zoneArr = getZoneList(radioGWArr[i]);
if( zoneArr == null)
continue;
for(int j=0; j < zoneArr.length; j++)
{
Zone zone = parseZone(zoneArr[j]);
String[] channelArr = getChannelList(zoneArr[j]);
if( channelArr == null)
continue;
for(int k =0; k < channelArr.length; k++)
{
Channel channel = parseChannel(channelArr[k]);
//add channel to zone
zone.channelList.add(channel);
}
//add zone to radio GW
rgw.zoneList.add(zone);
}
radioGWList.add(rgw);
}
return radioGWList;
}
private Zone_and_channel parse_CHANNEL_BRDCST(String payload) {
Zone_and_channel zacObj = new Zone_and_channel();
try {
String[] tempArr = payload.split("&");
String[] gwID_and_rgwID = tempArr[0].split("/");
zacObj.gwID = Integer.parseInt(gwID_and_rgwID[0].trim());
zacObj.rgwID = Integer.parseInt(gwID_and_rgwID[1].trim());
String[] zoneNr_and_channelNr = tempArr[1].split("/");
zacObj.zoneNr = Integer.parseInt(zoneNr_and_channelNr[0].trim());
zacObj.channelNr = Integer.parseInt(zoneNr_and_channelNr[1].trim());
} catch (Exception e) {
SM.Debug("Cmd 204 error:"+e.toString());
}
return zacObj;
}
private IncCall parse_CALL_STATUS_BRDCST(String payload)
{
IncCall incCallObj = new IncCall();
try {
incCallObj.opCode = rOpcode;
String[] tempArr = payload.split("&");
String[] gwID_and_rgwID_imei = tempArr[0].split("/");
incCallObj.gwID = Integer.parseInt(gwID_and_rgwID_imei[0]);
incCallObj.rgwID = Integer.parseInt(gwID_and_rgwID_imei[1]);
incCallObj.Imei = Long.parseLong(gwID_and_rgwID_imei[2]);
incCallObj.callStatus = Integer.parseInt(tempArr[1]);
incCallObj.callType = Integer.parseInt(tempArr[2]);
incCallObj.groupId = Integer.parseInt(tempArr[3]);
if (tempArr.length > 4 )
incCallObj.userID = Integer.parseInt(tempArr[4]);
} catch (Exception e) {
SM.Debug("Cmd 125, 126 error:"+e.toString());
}
return incCallObj;
}
private RadioStatus parse_RADIO_STATUS_REP(String payload)
{
RadioStatus radioStatus = new RadioStatus();
try
{
String[] tempArr = payload.split("&");
if(tempArr.length == 4 || tempArr.length == 5) {
radioStatus.status = 1;
radioStatus.incCall.callStatus = Integer.parseInt(tempArr[0]);
radioStatus.incCall.callType = Integer.parseInt(tempArr[1]);
radioStatus.incCall.Imei = Integer.parseInt(tempArr[2]);
radioStatus.incCall.callerID = Integer.parseInt(tempArr[2]);
radioStatus.incCall.groupId = Integer.parseInt(tempArr[3]);
radioStatus.incCall.callDestID = Integer.parseInt(tempArr[3]);
if(tempArr.length == 5)
radioStatus.incCall.userID = Integer.parseInt(tempArr[4]);
}
else {
String[] gwID_and_rgwID = tempArr[0].split("/");
radioStatus.gwID = Integer.parseInt(gwID_and_rgwID[0]);
radioStatus.rgwID = Integer.parseInt(gwID_and_rgwID[1]);
radioStatus.status = Integer.parseInt(tempArr[1]);
}
}
catch (Exception e) {
SM.Debug("Cmd 199 error:"+e.toString());
}
return radioStatus;
}
private Emerg parse_EMERGENCY_REP(String payload)
{
Emerg emergObj = new Emerg();
try {
String[] tempArr = payload.split("/");
emergObj.function = Integer.parseInt(tempArr[0]);
emergObj.status = Integer.parseInt(tempArr[1]);
// emerg.userID = Integer.parseInt(tempArr[2]);
} catch (Exception e) {
SM.Debug("Cmd 230 error:"+e.toString());
}
return emergObj;
}
private SUstatus parse_UNIT_STATUS_UPDATE(String payload)
{
SUstatus suStatusObj = new SUstatus();
try {
String[] tempArr = payload.split("&");
suStatusObj.imei = Integer.parseInt(tempArr[0]);
suStatusObj.status = Integer.parseInt(tempArr[1]);
} catch (Exception e) {
SM.Debug("Cmd 250 error:"+e.toString());
}
return suStatusObj;
}
private IncCall parse_CALL_TYPE_REP(String payload)
{
IncCall incCallObj = new IncCall();
try {
incCallObj.opCode = rOpcode;
String[] tempArr = payload.split("/");
incCallObj.callType = Integer.parseInt(tempArr[0]);
incCallObj.callStatus = Integer.parseInt(tempArr[1]);
SM.Debug("GOT CHANGE CALL TYPE MSG", incCallObj.opCode + " # " + incCallObj.callType + " # " + incCallObj.callStatus);
} catch (Exception e) {
SM.Debug("Cmd 115,116,117 error:"+e.toString());
}
return incCallObj;
}
}