diff --git a/FanV3.cs b/FanV3.cs
index 068957f..6877f37 100644
--- a/FanV3.cs
+++ b/FanV3.cs
@@ -1,13 +1,12 @@
using System;
using System.IO.MemoryMappedFiles;
using System.Net.Sockets;
+using System.Text;
namespace FanPlugin.Wrapper
{
public class FanV3
{
-
-
// Version 3 FAN
private static String playModelSingle = "36";
@@ -18,8 +17,15 @@ public class FanV3
private static String end = "a4a8c2e3";
private static String sendAPInfo = "99";
private static String contentDefaultValue = "00";
- public static String DEFUALT_SERVER_IP = "192.168.4.1";
- public static int DEFUALT_SERVER_PORT = 5233;
+
+ // Configurables (public pour permettre override depuis l'extérieur)
+ public static string ServerIp { get; set; } = "192.168.4.1";
+ public static int ServerPort { get; set; } = 5233;
+ /// Timeout de connexion en millisecondes
+ public static int ConnectTimeoutMs { get; set; } = 3000;
+ /// Timeout de lecture/écriture socket en millisecondes
+ public static int SocketTimeoutMs { get; set; } = 3000;
+
private static String getFileList = "38";
private static String playlast = "33";
private static String powerOff = "94";
@@ -33,7 +39,10 @@ public struct SharedData {
public string playVideoWithId(String videoID)
{
-
+ if (!int.TryParse(videoID, out int vid))
+ {
+ return "Invalid videoID";
+ }
SharedMemory shmem = new SharedMemory("Shem",32);
@@ -44,33 +53,29 @@ public string playVideoWithId(String videoID)
// Read from shared memory
data = shmem.Data;
-
// Change some data
data.last = data.actual;
- data.actual = int.Parse(videoID);
+ data.actual = vid;
-
// Write back to shared memory
shmem.Data = data;
// Close shared memory
shmem.Close();
- String command = "c31c" + playFile + DEFAULT_HAS_2_DATA_LENTH + intTo2Str(int.Parse(videoID)) + end;
+ String command = "c31c" + playFile + DEFAULT_HAS_2_DATA_LENTH + intTo2Str(vid) + end;
connect(command);
return "NEW ID = " + data.actual + " Old ID = " + data.last;
}
public String selectSingleVideoPlaybackMode() {
-
String command = "c31c" + playModelSingle + DEFAULT_NO_DATA_LENTH + end;
return connect(command);
}
public String selectLoopVideoPlaybackMode()
{
-
String command = "c31c" + playLoop + DEFAULT_NO_DATA_LENTH + end;
return connect(command);
}
@@ -86,27 +91,23 @@ public String getApiVersionInfo() {
}
public String playLastFromFan() {
-
String command = "c31c" + playlast + DEFAULT_NO_DATA_LENTH + end;
return connect(command);
}
public String sendPowerOn()
{
-
String command = "c31c" + powerOn + DEFAULT_NO_DATA_LENTH + end;
return connect(command);
}
public String sendPowerOff()
{
-
String command = "c31c" + powerOff + DEFAULT_NO_DATA_LENTH + end;
return connect(command);
}
public String playOldFromFan() {
-
SharedMemory shmem = new SharedMemory("Shem", 32);
if (!shmem.Open()) return "fail";
@@ -147,122 +148,82 @@ private static String connect(String message)
{
try
{
- // Create a TcpClient.
- // Note, for this client to work you need to have a TcpServer
- // connected to the same address as specified by the server, port
- // combination.
- Int32 port = DEFUALT_SERVER_PORT;
- System.Net.Sockets.TcpClient client = new TcpClient(DEFUALT_SERVER_IP, port);
-
- // Translate the passed message into ASCII and store it as a Byte array.
- Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
-
- // Get a client stream for reading and writing.
- // Stream stream = client.GetStream();
-
- NetworkStream stream = client.GetStream();
-
- // Send the message to the connected TcpServer.
- stream.Write(data, 0, data.Length);
-
- // Console.WriteLine("Sent: {0}", message);
-
- // Receive the TcpServer.response.
-
- // Buffer to store the response bytes.
- //data = new Byte[256];
-
- // String to store the response ASCII representation.
- //String responseData = String.Empty;
-
- // Read the first batch of the TcpServer response bytes.
- //Int32 bytes = stream.Read(data, 0, data.Length);
- //responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
- //Console.WriteLine("Received: {0}", responseData);
-
- // Close everything.
- stream.Close();
- client.Close();
+ using (var client = new TcpClient())
+ {
+ var connectTask = client.ConnectAsync(ServerIp, ServerPort);
+ bool connected = connectTask.Wait(ConnectTimeoutMs);
+ if (!connected || !client.Connected)
+ {
+ return "Connection timeout or refused";
+ }
+
+ client.SendTimeout = SocketTimeoutMs;
+ client.ReceiveTimeout = SocketTimeoutMs;
+
+ using (NetworkStream stream = client.GetStream())
+ {
+ Byte[] data = Encoding.ASCII.GetBytes(message);
+ stream.Write(data, 0, data.Length);
+ // Not reading response here
+ }
+ }
}
catch (ArgumentNullException e)
{
- // Console.WriteLine("ArgumentNullException: {0}", e);
return e.Message;
}
catch (SocketException e)
{
- // Console.WriteLine("SocketException: {0}", e);
+ return e.Message;
+ }
+ catch (Exception e)
+ {
return e.Message;
}
- // Console.WriteLine("\n Press Enter to continue...");
- // Console.Read();
-
- return "Command successfull";
+ return "Command successful";
}
-
private static String connectRead(String message)
{
try
{
- // Create a TcpClient.
- // Note, for this client to work you need to have a TcpServer
- // connected to the same address as specified by the server, port
- // combination.
- Int32 port = DEFUALT_SERVER_PORT;
- System.Net.Sockets.TcpClient client = new TcpClient(DEFUALT_SERVER_IP, port);
-
- // Translate the passed message into ASCII and store it as a Byte array.
- Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
-
- // Get a client stream for reading and writing.
- // Stream stream = client.GetStream();
-
- NetworkStream stream = client.GetStream();
-
- // Send the message to the connected TcpServer.
- stream.Write(data, 0, data.Length);
-
- // Console.WriteLine("Sent: {0}", message);
-
- // Receive the TcpServer.response.
-
- // Buffer to store the response bytes.
- data = new Byte[256];
-
- // String to store the response ASCII representation.
- String responseData = String.Empty;
-
- // Read the first batch of the TcpServer response bytes.
- Int32 bytes = stream.Read(data, 0, data.Length);
- responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
- // Console.WriteLine("Received: {0}", responseData);
-
- // Close everything.
- stream.Close();
- client.Close();
-
- return responseData;
+ using (var client = new TcpClient())
+ {
+ var connectTask = client.ConnectAsync(ServerIp, ServerPort);
+ bool connected = connectTask.Wait(ConnectTimeoutMs);
+ if (!connected || !client.Connected)
+ {
+ return "Connection timeout or refused";
+ }
+
+ client.SendTimeout = SocketTimeoutMs;
+ client.ReceiveTimeout = SocketTimeoutMs;
+
+ using (NetworkStream stream = client.GetStream())
+ {
+ Byte[] data = Encoding.ASCII.GetBytes(message);
+ stream.Write(data, 0, data.Length);
+
+ data = new Byte[1024];
+ int bytes = stream.Read(data, 0, data.Length);
+ String responseData = Encoding.ASCII.GetString(data, 0, bytes);
+ return responseData;
+ }
+ }
}
catch (ArgumentNullException e)
{
- // Console.WriteLine("ArgumentNullException: {0}", e);
return e.Message;
}
catch (SocketException e)
{
- // Console.WriteLine("SocketException: {0}", e);
return e.Message;
}
-
+ catch (Exception e)
+ {
+ return e.Message;
+ }
}
-
-
-
-
-
}
-
-
-}
+}
\ No newline at end of file