mirror of
https://github.com/cccb/servicepoint.git
synced 2025-01-18 10:00:14 +01:00
move around readme parts again
This commit is contained in:
parent
1dad113ca1
commit
8a68de8895
97
README.md
97
README.md
|
@ -12,20 +12,19 @@ This repository contains a library for parsing, encoding and sending packets to
|
||||||
## Note on stability
|
## Note on stability
|
||||||
|
|
||||||
This library is still in early development.
|
This library is still in early development.
|
||||||
You can absolutely use it and it works, but expect minor breaking changes with every version bump.
|
You can absolutely use it, and it works, but expect minor breaking changes with every version bump.
|
||||||
Please specify the full version including patch in your Cargo.toml until 1.0 is released.
|
Please specify the full version including patch in your Cargo.toml until 1.0 is released.
|
||||||
|
|
||||||
Expect bugs and/or missing features in the language bindings for now. If you need something specific, open an issue or a pull request.
|
Expect bugs and/or missing features in the language bindings for now. If you need something specific, open an issue or a pull request.
|
||||||
|
|
||||||
## Examples
|
## Rust
|
||||||
|
|
||||||
More are available in the `examples` folder.
|
|
||||||
|
|
||||||
### Rust
|
|
||||||
|
|
||||||
This is where the library works the best.
|
This is where the library works the best.
|
||||||
|
Any API usage accepted by the compiler in a safe context is either safe or buggy (issues welcome)
|
||||||
|
|
||||||
Any API usage accepted by the compiler in a safe context is either safe or buggy (issues welcome).
|
```bash
|
||||||
|
cargo add servicepoint2
|
||||||
|
```
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
fn main() {
|
fn main() {
|
||||||
|
@ -39,38 +38,9 @@ fn main() {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### C# / F#
|
More examples are available in the repository folder and in the [Projects using the library]() section
|
||||||
|
|
||||||
Uses C bindings internally to provide a similar API to rust. Things to keep in mind:
|
## C / C++
|
||||||
|
|
||||||
- You will get a `NullPointerException` when trying to call a method where the native instance has been consumed already (e.g. when `Send`ing a command instance twice). Send a clone instead of the original if you want to keep using it.
|
|
||||||
- Some lower-level APIs _will_ panic in native code when used improperly.
|
|
||||||
Example: manipulating the `Span<byte>` of an object after freeing the instance.
|
|
||||||
- C# specifics are documented in the library. Use the rust documentation for everything else. Naming and semantics are the same apart from CamelCase instead of kebap_case.
|
|
||||||
- You will only get rust backtraces in debug builds of the native code.
|
|
||||||
- F# is not explicitly tested. If there are usability or functionality problems, please open an issue.
|
|
||||||
- Reading and writing to instances concurrently is not safe. Only reading concurrently is safe.
|
|
||||||
|
|
||||||
```csharp
|
|
||||||
using ServicePoint2;
|
|
||||||
|
|
||||||
// using statement calls Dispose() on scope exit, which frees unmanaged instances
|
|
||||||
using var connection = Connection.Open("127.0.0.1:2342");
|
|
||||||
using var pixels = PixelGrid.New(Constants.PixelWidth, Constants.PixelHeight);
|
|
||||||
|
|
||||||
while (true)
|
|
||||||
{
|
|
||||||
pixels.Fill(true);
|
|
||||||
connection.Send(Command.BitmapLinearWin(0, 0, pixels.Clone()));
|
|
||||||
Thread.Sleep(5000);
|
|
||||||
|
|
||||||
pixels.Fill(false);
|
|
||||||
connection.Send(Command.BitmapLinearWin(0, 0, pixels.Clone()));
|
|
||||||
Thread.Sleep(5000);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### C and other languages
|
|
||||||
|
|
||||||
The lowest common denominator. Things to keep in mind:
|
The lowest common denominator. Things to keep in mind:
|
||||||
|
|
||||||
|
@ -106,26 +76,41 @@ int main(void) {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Installation
|
## C# / F#
|
||||||
|
|
||||||
### Rust
|
Uses C bindings internally to provide a similar API to rust. Things to keep in mind:
|
||||||
|
|
||||||
```bash
|
- You will get a `NullPointerException` when trying to call a method where the native instance has been consumed already (e.g. when `Send`ing a command instance twice). Send a clone instead of the original if you want to keep using it.
|
||||||
cargo add servicepoint2
|
- Some lower-level APIs _will_ panic in native code when used improperly.
|
||||||
|
Example: manipulating the `Span<byte>` of an object after freeing the instance.
|
||||||
|
- C# specifics are documented in the library. Use the rust documentation for everything else. Naming and semantics are the same apart from CamelCase instead of kebab_case.
|
||||||
|
- You will only get rust backtraces in debug builds of the native code.
|
||||||
|
- F# is not explicitly tested. If there are usability or functionality problems, please open an issue.
|
||||||
|
- Reading and writing to instances concurrently is not safe. Only reading concurrently is safe.
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
using ServicePoint2;
|
||||||
|
|
||||||
|
// using statement calls Dispose() on scope exit, which frees unmanaged instances
|
||||||
|
using var connection = Connection.Open("127.0.0.1:2342");
|
||||||
|
using var pixels = PixelGrid.New(Constants.PixelWidth, Constants.PixelHeight);
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
pixels.Fill(true);
|
||||||
|
connection.Send(Command.BitmapLinearWin(0, 0, pixels.Clone()));
|
||||||
|
Thread.Sleep(5000);
|
||||||
|
|
||||||
|
pixels.Fill(false);
|
||||||
|
connection.Send(Command.BitmapLinearWin(0, 0, pixels.Clone()));
|
||||||
|
Thread.Sleep(5000);
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### C / C++
|
### Installation
|
||||||
|
|
||||||
Copy the header to your project and compile against.
|
|
||||||
|
|
||||||
You have the choice of linking statically (recommended) or dynamically.
|
|
||||||
- The C example shows how to link statically against the `staticlib` variant.
|
|
||||||
- When linked dynamically, you have to provide the `cdylib` at runtime in the _same_ version, as there are no API/ABI guarantees yet.
|
|
||||||
|
|
||||||
### C# / F#
|
|
||||||
|
|
||||||
NuGet packages are not a good way to distribute native projects ([relevant issue](https://github.com/dotnet/sdk/issues/33845)).
|
NuGet packages are not a good way to distribute native projects ([relevant issue](https://github.com/dotnet/sdk/issues/33845)).
|
||||||
Because of that, there is no NuGet package you can use directly.
|
Because of that, there is no NuGet package you can use directly.
|
||||||
Including this repository as a submodule and building from source is the recommended way of using the library.
|
Including this repository as a submodule and building from source is the recommended way of using the library.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
@ -138,6 +123,14 @@ The rust library will automatically be built.
|
||||||
|
|
||||||
Please provide more information in the form of an issue if you need the build to copy a different library file for your platform.
|
Please provide more information in the form of an issue if you need the build to copy a different library file for your platform.
|
||||||
|
|
||||||
|
### Installation
|
||||||
|
|
||||||
|
Copy the header to your project and compile against.
|
||||||
|
|
||||||
|
You have the choice of linking statically (recommended) or dynamically.
|
||||||
|
- The C example shows how to link statically against the `staticlib` variant.
|
||||||
|
- When linked dynamically, you have to provide the `cdylib` at runtime in the _same_ version, as there are no API/ABI guarantees yet.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
This library has multiple compression libraries as optional dependencies.
|
This library has multiple compression libraries as optional dependencies.
|
||||||
|
|
Loading…
Reference in a new issue