Skip to content

Commit

Permalink
Async method !
Browse files Browse the repository at this point in the history
  • Loading branch information
zonetecde committed Mar 11, 2023
1 parent 3cfb607 commit 13d890b
Show file tree
Hide file tree
Showing 6 changed files with 78 additions and 13 deletions.
Binary file added setup/QLS Zoneck 1.0.8.exe
Binary file not shown.
2 changes: 1 addition & 1 deletion setup/setup.iss
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "QLS Zoneck"
#define MyAppVersion "1.0.7"
#define MyAppVersion "1.0.8"
#define MyAppPublisher "zonetecde"
#define MyAppURL "github.com/zonetecde/zoneck-server"
#define MyAppExeName "QLS UI.exe"
Expand Down
66 changes: 55 additions & 11 deletions zck_client/ZoneckClient.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using static zck_client.ClassLibrary;

namespace zck_client
Expand All @@ -12,7 +14,7 @@ public class ZoneckClient
{
private Socket SocketClient { get; set; }
public string MyId { get; set; }
internal Action<Message> Receive { get; }
internal Action<Message> Receive { get; set; }

public ZoneckClient(string appName, string ip, int port, Action<Message> Receive)
{
Expand Down Expand Up @@ -50,13 +52,32 @@ public void Send(string str, string toId = "", string args = "")
/// Demande le contenue d'un fichier stocké sur le serveur
/// </summary>
/// <param name="path">Nom du fichier demandé (ex : folder/file.txt)</param>
/// <remarks>Le contenue du fichier sera envoyé dans votre fonction MessageReceived. Ce sera un message de type "GET_FILE". Son contenue se trouvera donc dans le msg.Content</remarks>
public void GetFile(string path, string args = "")
public string GetFileContent(string path)
{
string msg = JsonConvert.SerializeObject(new Message(MyId, path, MESSAGE_TYPE.GET_FILE, args: args)) + "\r\n";
var waitHandle = new AutoResetEvent(false);

Message response = null;
void handler(Message message)
{
if (message.MessageType == MESSAGE_TYPE.GET_FILE)
{
response = message;
waitHandle.Set();
}
}

Receive += handler;

string msg = JsonConvert.SerializeObject(new Message(MyId, path, MESSAGE_TYPE.GET_FILE, args: string.Empty)) + "\r\n";

var buffter = Encoding.UTF8.GetBytes(msg);
var temp = SocketClient.Send(buffter);

waitHandle.WaitOne();

Receive -= handler;

return JsonConvert.DeserializeObject<Message>(response.Content).Content;
}

/// <summary>
Expand Down Expand Up @@ -101,16 +122,37 @@ public void UpdateFile(string path, string updatedFileContent, bool warnOtherPeo
}

/// <summary>
/// Retourne dans un message de type LIST_FILE (dans votre fonction MessageReceived) tous les fichiers du serveur séparé par une virgule.
/// Récupère la liste des fichiers présent sur le serveur
/// </summary>
public void ListFile(string args = "")
/// <returns>Un array de string comportant les fichiers présent sur le serveur</returns>
public string[] ListFile()
{
string msg = JsonConvert.SerializeObject(new Message(MyId, args, MESSAGE_TYPE.LIST_FILE, args: args)) + "\r\n";
var waitHandle = new AutoResetEvent(false);

var buffter = Encoding.UTF8.GetBytes(msg);
var temp = SocketClient.Send(buffter);
Message response = null;
void handler(Message message)
{
if (message.MessageType == MESSAGE_TYPE.LIST_FILE)
{
response = message;
waitHandle.Set();
}
}

Receive += handler;

string msg = JsonConvert.SerializeObject(new Message(MyId, string.Empty, MESSAGE_TYPE.LIST_FILE, args: string.Empty)) + "\r\n";
var buffer = Encoding.UTF8.GetBytes(msg);
var temp = SocketClient.Send(buffer);

waitHandle.WaitOne();

Receive -= handler;

return response.Content.Split(',');
}


/// <summary>
/// Reçois un message du serveur
/// </summary>
Expand All @@ -134,14 +176,16 @@ private void _Receive()
// pour id
if (received_message.MessageType == MESSAGE_TYPE.DONNER_ID)
MyId = received_message.Content;

Receive(received_message);

if(received_message.MessageType != MESSAGE_TYPE.GET_FILE && received_message.MessageType != MESSAGE_TYPE.LIST_FILE)
Receive(received_message);
}
}
catch
{ }

}
}

}
}
4 changes: 4 additions & 0 deletions zck_client/packages.config
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,8 @@
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net472" />
<package id="SuperSocket" version="1.6.6.1" targetFramework="net472" />
<package id="SuperSocket.Engine" version="1.6.6.1" targetFramework="net472" />
<package id="System.Buffers" version="4.5.1" targetFramework="net472" />
<package id="System.Memory" version="4.5.5" targetFramework="net472" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.3" targetFramework="net472" />
</packages>
13 changes: 13 additions & 0 deletions zck_client/zck_client.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,21 @@
<HintPath>..\packages\SuperSocket.Engine.1.6.6.1\lib\net45\SuperSocket.SocketService.exe</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Web" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
Expand Down
6 changes: 5 additions & 1 deletion zck_server/ZoneckServer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,8 @@ static void appServer_NewRequestReceived(AppSession clientSession, StringRequest
// Renvois à la personne un objet de type Message contenant la liste des fichiers séparés par une virgule.
Message msg = new Message(received_message.Content, String.Join(",", files).Replace("serverfiles/", string.Empty), MESSAGE_TYPE.LIST_FILE,
args: received_message.Args);
Server.GetSessionByID(received_message.Id).TrySend(JsonConvert.SerializeObject(msg));

Server.GetSessionByID(received_message.Id).Send(JsonConvert.SerializeObject(msg));

if (enableDebug)
DebugMessage((DateTime.Now.ToString() + " - " + received_message.Id + " a reçu une liste des fichiers présents sur le serveur"));
Expand Down Expand Up @@ -283,7 +284,10 @@ static void appServer_NewRequestReceived(AppSession clientSession, StringRequest
{
// Si le fichier n'existe pas on le créé
if (!File.Exists("serverfiles/" + received_message.Content))
{
Directory.CreateDirectory("serverfiles/" + Path.GetDirectoryName(received_message.Content));
File.WriteAllText("serverfiles/" + received_message.Content, "");
}

// Récupère le contenue du fichier
string content = File.ReadAllText("serverfiles/" + received_message.Content);
Expand Down

0 comments on commit 13d890b

Please sign in to comment.