package art.servers.sosserver.controller.musatel;
import art.library.interop.serialization.Serialization;
import art.library.model.devices.sos.Sos;
import art.library.model.devices.sos.musatel.information.SosInformationMusatelConnection;
import art.library.model.devices.sos.musatel.status.SosStatusMusatelConnection;
import art.library.utils.synchro.Mutex;
import art.servers.Shared;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
public class ControllerSos_MusatelSender
{
private ControllerSos_Musatel controller = null;
private Socket socket = null;
private InputStream is = null;
private OutputStream os = null;
private Mutex mutex = new Mutex();
private String name = null;
public ControllerSos_MusatelSender(ControllerSos_Musatel controller)
{
this.controller = controller;
this.name = controller.getName();
}
//
protected void ORD_FON_ON (String username, String computer, String computerAddress, int audioPort, int priority) throws Exception
{
Sos clone = (Sos)Serialization.clone(controller.getDevice());
byte[] address = MusatelProtocol.getIpArray(computerAddress);
Shared.println(name, "> ORD_FON_ON " + computerAddress + ":" + audioPort);
function(MusatelProtocol.ORD_FON_ON, new int[]{address[0], address[1], address[2], address[3],(byte)(audioPort & 0xFF),(byte)((audioPort >> 8) & 0xFF)});
SosStatusMusatelConnection connection = new SosStatusMusatelConnection();
clone.getDeviceStatus().musatel.currentConnection = connection;
connection.timestamp = System.currentTimeMillis();
connection.user = username;
connection.computer = computer;
connection.address = computerAddress;
connection.audioPort = audioPort;
connection.priority = priority;
controller.setSosPriority(priority);
Shared.model.updateDevice(controller.getDevice(), clone);
}
protected void ORD_FON_ON (String computerAddress, int audioPort) throws Exception
{
Shared.println(name, "> ORD_FON_ON " + computerAddress + ":" + audioPort);
byte[] address = MusatelProtocol.getIpArray(computerAddress);
function(MusatelProtocol.ORD_FON_ON, new int[]{address[0], address[1], address[2], address[3],(byte)(audioPort & 0xFF),(byte)((audioPort >> 8) & 0xFF)});
}
protected void ORD_FON_OFF () throws Exception
{
Shared.println(name, "> ORD_FON_OFF");
function(MusatelProtocol.ORD_FON_OFF);
}
protected void ORD_TON_ON (String computerAddress, int audioPort, int type) throws Exception
{
Shared.println(name, "> ORD_TON_ON " + computerAddress + ":" + audioPort);
byte[] address = MusatelProtocol.getIpArray(computerAddress);
function(MusatelProtocol.ORD_TON_ON, new int[]{type, address[0], address[1], address[2], address[3],(byte)(audioPort & 0xFF),(byte)((audioPort >> 8) & 0xFF)});
}
protected void ORD_TON_OFF () throws Exception
{
Shared.println(name, "> ORD_TON_OFF");
function(MusatelProtocol.ORD_TON_OFF);
}
protected void ORD_TST_MAN () throws Exception
{
Shared.println(name, "> ORD_TST_MAN");
function(new byte[]{(byte)0x00, (byte)MusatelProtocol.ORD_TST_MAN, (byte)0xFF, (byte)0xFF});
}
protected void ORD_TST_FON (String computerAddress, int audioPort) throws Exception
{
Shared.println(name, "> ORD_TST_FON " + computerAddress + ":" + audioPort);
byte[] address = MusatelProtocol.getIpArray(computerAddress);
function(MusatelProtocol.ORD_TST_FON, new int[]{address[0], address[1], address[2], address[3],(byte)(audioPort & 0xFF),(byte)((audioPort >> 8) & 0xFF)});
}
protected void ORD_VOZ_ON(String username, String computer, String computerAddress, int audioPort, int message) throws Exception
{
Shared.println(name, "> ORD_VOZ_ON " + computerAddress + ":" + audioPort);
byte[] address = MusatelProtocol.getIpArray(computerAddress);
function(MusatelProtocol.ORD_FON_ON, new int[]{(byte)message, address[0], address[1], address[2], address[3],(byte)(audioPort & 0xFF),(byte)((audioPort >> 8) & 0xFF)});
}
protected void ORD_VOZ_OFF () throws Exception
{
Shared.println(name, "> ORD_VOZ_OFF");
function(MusatelProtocol.ORD_VOZ_OFF);
}
protected void ORD_ADJ_VOL (int level) throws Exception
{
if (level < 0) level = 0;
if (level > 7) level = 7;
Shared.println(name, "> ORD_ADJ_VOL " + Shared.getMessage("level") + " = " + level);
function(MusatelProtocol.ORD_ADJ_VOL, new int[]{level});
}
protected void ACK_DEM_USE() throws Exception
{
Shared.println(name, "> ACK_DEM_USE");
function(MusatelProtocol.ACK_DEM_USE, new int[]{MusatelProtocol.L_ESP});
}
protected void ACK_DEM_USE(String computerAddress, int audioPort) throws Exception
{
Shared.println(name, "> ACK_DEM_USE " + computerAddress + ":" + audioPort);
byte[] address = MusatelProtocol.getIpArray(computerAddress);
function(MusatelProtocol.ACK_DEM_USE, new int[]
{
MusatelProtocol.L_FON,
address[0],
address[1],
address[2],
address[3],
(byte)(audioPort & 0xFF),
(byte)((audioPort >> 8) & 0xFF)
});
}
protected void ACK_DEM_SER() throws Exception
{
Shared.println(name, "> ACK_DEM_SER");
function(MusatelProtocol.ACK_DEM_SER, new int[]{MusatelProtocol.L_ESP});
}
protected void ACK_DEM_SER(String computerAddress, int audioPort) throws Exception
{
Shared.println(name, "> ACK_DEM_SER " + computerAddress + ":" + audioPort);
byte[] address = MusatelProtocol.getIpArray(computerAddress);
function(MusatelProtocol.ACK_DEM_USE, new int[]
{
MusatelProtocol.L_FON,
address[0],
address[1],
address[2],
address[3],
(byte)(audioPort & 0xFF),
(byte)((audioPort >> 8) & 0xFF)
});
}
protected void ACK_ENV_ALA() throws Exception
{
Shared.println(name, "> ACK_ENV_ALA");
function(MusatelProtocol.ACK_ENV_ALA);
}
//
//
private void connect () throws Exception
{
if (socket != null)
{
if (socket.isConnected() == true)
{
return;
}
}
disconnect();
SosInformationMusatelConnection connection = ((Sos)controller.getDevice()).getDeviceInformation().musatel.connection;
InetAddress inetAddress = InetAddress.getByName(connection.address);
SocketAddress sockaddress = new InetSocketAddress(inetAddress, connection.portSOS);
socket = new Socket();
socket.connect(sockaddress, connection.timeout);
socket.setSoLinger (true, 1);
socket.setSoTimeout(connection.timeout);
is = socket.getInputStream();
os = socket.getOutputStream();
}
private void function (int code) throws Exception
{
function(code, MusatelProtocol.P_MAS, new int[0]);
}
private void function (int code, int[] params) throws Exception
{
function(code, (byte)MusatelProtocol.P_MAS, params);
}
private void function (int code, int type, int[] params) throws Exception
{
byte[] send = new byte[5 + params.length];
send[0] = 0x00;
send[1] = (byte)code;
send[2] = (byte)type;
for (int i=0; i
}