// Ce message est affiché si une connexion est établie
System.out.println("Connexion au serveur établie!");
// Récupère la requête du client... (flux de données)
InputStream isIn = sConnexion.getInputStream();
ObjectInputStream oisIn = new ObjectInputStream(isIn);
DataX10 dx10Commande = new DataX10();
dx10Commande = (DataX10) oisIn.readObject();
System.out.println("Requête : " + dx10Commande);
String sReponse = ""; // String de reponse du serveur
/// Traitement de la commande
try
{
String sCommande; // String pour la commande a envoyer
// Si c'est l'Utilitaire br
if(dx10Commande.getUtilitaire().equals("br"))
{
// Teste de la commande, si la commands est
// ALL_ON/OFF ou LAMPS_ON/OFF on retire le key code
if( (dx10Commande.getCommandCode().equals("ALL_ON")) ||
(dx10Commande.getCommandCode().equals("ALL_OFF")) ||
(dx10Commande.getCommandCode().equals("LAMPS_ON")) ||
(dx10Commande.getCommandCode().equals("LAMPS_OFF")) )
{
dx10Commande.setKeyCode("");
}
// Construction de la commande à envoyer
sCommande = dx10Commande.getHouseCode();
sCommande += dx10Commande.getKeyCode();
sCommande += " ";
sCommande += dx10Commande.getCommandCode();
sCommande += " ";
sCommande += dx10Commande.getOptions();
System.out.println("Commande: br " + sCommande);
// Lancement de br
Process br = Runtime.getRuntime().exec("br " + sCommande);
// Traitement de la sortie de la commande exécutée
BufferedReader brDirectory = new BufferedReader(
new InputStreamReader(
br.getInputStream()));
BufferedReader brErrDirectory = new BufferedReader(
new InputStreamReader(
br.getErrorStream()));
System.out.println("Reponse de br:");
String sBRRetour;
while((sBRRetour = brDirectory.readLine()) != null)
{
sReponse += sBRRetour;
sReponse += "\n";
System.out.println(sBRRetour);
}
}
// Valeurs pour l'envoi de UC, RF et PL
char cSOH = '~';
char cInterface;
char cHouseCode = (char)(dx10Commande.getHouseCode().charAt(0)-17);
char cKeyCode = (char)((Integer.parseInt(dx10Commande.getKeyCode())-1)+48);
char cCommandCode = 0;
char cChecksum = 0;
// Si c'est l'utilitaire uc
if(dx10Commande.getUtilitaire().equals("uc"))
{
// Interface UC
cInterface = '0';
cCommandCode = buildCommandCode(dx10Commande, cCommandCode);
cChecksum = calculateChecksum(cInterface, cHouseCode, cKeyCode, cCommandCode);
buildAndSendPacket(cSOH, cInterface, cHouseCode, cKeyCode, cCommandCode, cChecksum);
}
// Si c'est l'utilitaire rf
else if(dx10Commande.getUtilitaire().equals("rf"))
{
// Interface RF
cInterface = '1';
cCommandCode = buildCommandCode(dx10Commande, cCommandCode);
cChecksum = calculateChecksum(cInterface, cHouseCode, cKeyCode, cCommandCode);
buildAndSendPacket(cSOH, cInterface, cHouseCode, cKeyCode, cCommandCode, cChecksum);
}
// Si c'est l'utilitaire pl
else if(dx10Commande.getUtilitaire().equals("pl"))
{
// Interface RF
cInterface = '2';
cCommandCode = buildCommandCode(dx10Commande, cCommandCode);
cChecksum = calculateChecksum(cInterface, cHouseCode, cKeyCode, cCommandCode);
buildAndSendPacket(cSOH, cInterface, cHouseCode, cKeyCode, cCommandCode, cChecksum);
}
}
catch(Exception e)
{
System.out.println(e.toString());
}
// Si la réponse ou les options sont vides,
// on place un espace pour la compatiblilité avec
// le serveur SQL
if(sReponse.equals(""))
{
dx10Commande.setMessage(" ");
}
else
{
dx10Commande.setMessage(sReponse);
}
if(dx10Commande.getOptions().equals(""))
{
dx10Commande.setOptions(" ");
}
// Si la commande viens du pc avec br
if(dx10Commande.getUtilitaire().equals("br"))
{
/// Ecriture de la base de donnée
DBX10 dbX10 = new DBX10();
// Connexion à la base de donnée
dbX10.connexion("localhost", 3306, "X10", dx10Commande.getID(), dx10Commande.getPassword());
// Écriture dans la base de donnée
dbX10.ecrireDataX10("Actions", dx10Commande);
// Fermeture de la connexion à la base de donnée
dbX10.fermeture();
}
// Réponse du serveur au client... (flux de données)
OutputStream osOut = sConnexion.getOutputStream();
ObjectOutputStream oosOut = new ObjectOutputStream(osOut);
System.out.println(dx10Commande.getMessage());
System.out.println("sReponse: " + sReponse);
oosOut.writeObject(dx10Commande);
// Fermeture des objets de flux de données
oosOut.close();
osOut.close();