ProtankiNetworking 2.0.0
dotnet add package ProtankiNetworking --version 2.0.0
NuGet\Install-Package ProtankiNetworking -Version 2.0.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ProtankiNetworking" Version="2.0.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="ProtankiNetworking" Version="2.0.0" />
<PackageReference Include="ProtankiNetworking" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add ProtankiNetworking --version 2.0.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: ProtankiNetworking, 2.0.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package ProtankiNetworking@2.0.0
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=ProtankiNetworking&version=2.0.0
#tool nuget:?package=ProtankiNetworking&version=2.0.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
ProtankiNetworking
NuGet package: ProtankiNetworking on NuGet
A C# library for ProTanki game communication. This project is based on code from the ProboTanki-Lib Python library, but it is not exact port.
TCP Networking Components
The library provides three main components for TCP networking:
TankiTcpListener
: Base class for TCP server implementation that accepts client connectionsTankiTcpClientHandler
: Base class for handling individual client connections to TankiTcpListenerTankiTcpClient
: Base class for TCP client implementation
Usage Examples
1. Creating a Custom TCP Server
public class MyTankiServer : TankiTcpListener
{
public MyTankiServer(IPEndPoint localEndPoint, CProtection protection)
: base(localEndPoint, protection)
{
}
protected override TankiTcpClientHandler CreateClientHandler(
TcpClient client,
CancellationToken cancellationToken)
{
return new MyClientHandler(client, new Protection(), cancellationToken);
}
protected override async Task OnErrorAsync(Exception exception, string context)
{
Console.WriteLine($"Server error in {context}: {exception.Message}");
}
}
// Usage:
var endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080);
var server = new MyTankiServer(endPoint);
server.Start();
2. Creating a Custom Client Handler
public class MyClientHandler : TankiTcpClientHandler
{
public MyClientHandler(
TcpClient client,
CProtection protection,
CancellationToken cancellationToken)
: base(client, protection, cancellationToken)
{
}
protected override async Task OnRawPacketReceivedAsync(byte[] rawPacket)
{
Console.WriteLine($"Received raw packet of length {rawPacket.Length}");
}
protected override async Task OnPacketReceivedAsync(AbstractPacket packet)
{
Console.WriteLine($"Received packet of type {packet.GetType().Name}");
}
protected override async Task OnErrorAsync(Exception exception, string context)
{
Console.WriteLine($"Handler error in {context}: {exception.Message}");
}
}
3. Creating a Custom TCP Client
public class MyTankiClient : TankiTcpClient
{
public MyTankiClient(IPEndPoint serverEndPoint, CProtection protection)
: base(serverEndPoint, protection)
{
}
protected override async Task OnRawPacketReceivedAsync(byte[] rawPacket)
{
Console.WriteLine($"Received raw packet of length {rawPacket.Length}");
}
protected override async Task OnPacketReceivedAsync(AbstractPacket packet)
{
Console.WriteLine($"Received packet of type {packet.GetType().Name}");
}
protected override async Task OnErrorAsync(Exception exception, string context)
{
Console.WriteLine($"Client error in {context}: {exception.Message}");
}
}
// Usage:
var endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080);
var protection = new CProtection(); // Configure protection as needed
var client = new MyTankiClient(endPoint, protection);
await client.ConnectAsync();
Project Structure
Codec/
- Data encoding/decoding systemNetworking/
- Network communication utilitiesPackets/
- Game packet definitionsSecurity/
- Security and protection mechanisms
Disclaimer
This library is for educational purposes only. Use of this library should comply with ProTanki's terms of service. (so you can't use it at all 😄)
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net8.0
- System.Text.Json (>= 9.0.6)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.