Initial commit
This commit is contained in:
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
/.vs/
|
||||||
|
/CardMarketServer/bin
|
||||||
|
/CardMarketServer/obj/
|
||||||
25
CardMarketServer.sln
Normal file
25
CardMarketServer.sln
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 17
|
||||||
|
VisualStudioVersion = 17.6.33829.357
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CardMarketServer", "CardMarketServer\CardMarketServer.csproj", "{1A5EEA3B-ED7F-4D5F-91D5-74501DD74E1E}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{1A5EEA3B-ED7F-4D5F-91D5-74501DD74E1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{1A5EEA3B-ED7F-4D5F-91D5-74501DD74E1E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{1A5EEA3B-ED7F-4D5F-91D5-74501DD74E1E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{1A5EEA3B-ED7F-4D5F-91D5-74501DD74E1E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {66DB3E2E-EAA6-4E84-AF2B-E1C9D1CAC340}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
16
CardMarketServer/CardMarketServer.csproj
Normal file
16
CardMarketServer/CardMarketServer.csproj
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<None Update="usedList.csv">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
14
CardMarketServer/IUsedRepository.cs
Normal file
14
CardMarketServer/IUsedRepository.cs
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace CardMarketServer
|
||||||
|
{
|
||||||
|
internal interface IUsedRepository
|
||||||
|
{
|
||||||
|
List<string> Query { get; }
|
||||||
|
void Insert(string bestellungid);
|
||||||
|
}
|
||||||
|
}
|
||||||
48
CardMarketServer/Program.cs
Normal file
48
CardMarketServer/Program.cs
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
using System.Net;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
|
||||||
|
namespace CardMarketServer
|
||||||
|
{
|
||||||
|
internal class Program
|
||||||
|
{
|
||||||
|
private static object _lock = new object();
|
||||||
|
private static readonly List<TcpClient> _clients = new List<TcpClient>();
|
||||||
|
|
||||||
|
public static TcpClient[] GetClients()
|
||||||
|
{
|
||||||
|
lock(_lock ) return _clients.ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int GetClientCount()
|
||||||
|
{
|
||||||
|
lock(_lock) return _clients.Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void RemoveClient(TcpClient client)
|
||||||
|
{
|
||||||
|
lock(_lock) _clients.Remove(client);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void AddClient(TcpClient client)
|
||||||
|
{
|
||||||
|
lock(_lock) _clients.Add(client);
|
||||||
|
}
|
||||||
|
static void Main(string[] args)
|
||||||
|
{
|
||||||
|
IPAddress ip = IPAddress.Parse("0.0.0.0");
|
||||||
|
TcpListener ServerSocket = new TcpListener(ip, 4000);
|
||||||
|
ServerSocket.Start();
|
||||||
|
Console.WriteLine("Server started");
|
||||||
|
while(true)
|
||||||
|
{
|
||||||
|
TcpClient clientSocket = ServerSocket.AcceptTcpClient();
|
||||||
|
Console.WriteLine($"Client connected: {clientSocket.Client.RemoteEndPoint}");
|
||||||
|
AddClient(clientSocket);
|
||||||
|
handleClient client = new handleClient();
|
||||||
|
client.startClient(clientSocket);
|
||||||
|
|
||||||
|
Console.WriteLine($"{GetClientCount()} clients connected");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
29
CardMarketServer/UsedRepository.cs
Normal file
29
CardMarketServer/UsedRepository.cs
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace CardMarketServer
|
||||||
|
{
|
||||||
|
internal class UsedRepository : IUsedRepository
|
||||||
|
{
|
||||||
|
const string FILENAME = "usedList.csv";
|
||||||
|
public List<string> Query => File
|
||||||
|
.ReadLines(FILENAME)
|
||||||
|
.Select(l => l.Split(','))
|
||||||
|
.Select(p => new string(p[0]))
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
void insert(string key)
|
||||||
|
{
|
||||||
|
key += Environment.NewLine;
|
||||||
|
File.AppendAllText(FILENAME,key);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Insert(string bestellungid)
|
||||||
|
{
|
||||||
|
insert(bestellungid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
89
CardMarketServer/handleClient.cs
Normal file
89
CardMarketServer/handleClient.cs
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
using System.Diagnostics;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
|
||||||
|
namespace CardMarketServer
|
||||||
|
{
|
||||||
|
internal class handleClient
|
||||||
|
{
|
||||||
|
TcpClient clientSocket;
|
||||||
|
List<string> bereitsBearbeitet= new List<string>();
|
||||||
|
IUsedRepository repository;
|
||||||
|
public handleClient()
|
||||||
|
{
|
||||||
|
repository = new UsedRepository();
|
||||||
|
bereitsBearbeitet = repository.Query;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void startClient(TcpClient clientSocket)
|
||||||
|
{
|
||||||
|
this.clientSocket = clientSocket;
|
||||||
|
Thread ctThread = new Thread(Chat);
|
||||||
|
ctThread.Start();
|
||||||
|
}
|
||||||
|
enum EACTION
|
||||||
|
{
|
||||||
|
NONE,
|
||||||
|
TEST,
|
||||||
|
WRITE
|
||||||
|
}
|
||||||
|
private void Chat()
|
||||||
|
{
|
||||||
|
BinaryReader reader = new BinaryReader(clientSocket.GetStream());
|
||||||
|
try
|
||||||
|
{
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
string message = reader.ReadString();
|
||||||
|
|
||||||
|
if (message != null)
|
||||||
|
{
|
||||||
|
EACTION action = EACTION.NONE;
|
||||||
|
string[] parts = message.Split('#');
|
||||||
|
if(parts.Length < 3)
|
||||||
|
{
|
||||||
|
Console.WriteLine("fehler");
|
||||||
|
}
|
||||||
|
if (parts[1].Equals("TEST")) action = EACTION.TEST;
|
||||||
|
if (parts[1].Equals("WRITE")) action = EACTION.WRITE;
|
||||||
|
|
||||||
|
BinaryWriter writer = new BinaryWriter(clientSocket.GetStream());
|
||||||
|
if (action == EACTION.TEST)
|
||||||
|
{
|
||||||
|
Console.Write($"Test for {parts[2]} : ");
|
||||||
|
if (bereitsBearbeitet.Find(x => x.Equals(parts[2])) != null)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Eintrag bereits vorhanden");
|
||||||
|
writer.Write("FAILED");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("Eintrag noch nicht vorhanden");
|
||||||
|
writer.Write("OK");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(action == EACTION.WRITE)
|
||||||
|
{
|
||||||
|
repository.Insert(parts[2]);
|
||||||
|
writer.Write("OK");
|
||||||
|
}
|
||||||
|
Console.WriteLine(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(EndOfStreamException)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Client diconnecting");
|
||||||
|
clientSocket.Client.Shutdown(SocketShutdown.Both);
|
||||||
|
}
|
||||||
|
catch(IOException e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"IOException reading from {clientSocket.Client.RemoteEndPoint}: {e.Message}");
|
||||||
|
}
|
||||||
|
|
||||||
|
clientSocket.Close();
|
||||||
|
Program.RemoveClient(clientSocket);
|
||||||
|
Console.WriteLine($"{Program.GetClientCount()} clients connected");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
1
CardMarketServer/usedList.csv
Normal file
1
CardMarketServer/usedList.csv
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
|
|
Reference in New Issue
Block a user