sergeych
16b2d1780b
added way to close cannection from the adapter if the protocol implementation allows it (adapter.onCancel/adapter.cancel())
82 lines
2.7 KiB
Markdown
82 lines
2.7 KiB
Markdown
# PARanodi SECuruty 3 protocol
|
|
|
|
Please note about versioning
|
|
|
|
- v0.1.*+ __are incompatible with 0.0.* versions due to binary protocol optimization.
|
|
|
|
- v.0.2.* is a for of 0.1 build for JVM 1.8 for better inline compatibility
|
|
|
|
- v.0.3.* current most stable, JVM 1.8 and lotlin 1.7.21
|
|
|
|
Current stable version is __0.3.3__.
|
|
|
|
- v.0.4.* - improved cancellation & fixed auto-reconnection logic.
|
|
|
|
This is a connection-agnostic, full-duplex RPC type binary protocol, effective to work with binary data, such as encrypted data, keys, multimedia, etc. Its key points are:
|
|
|
|
- simple and practical transport RPC layer, which is a primary choice when, for exaple, `wss://` level by TSL is enough, e.g. when there is no sensitive data being transmitted (games, etc).
|
|
|
|
- can easily be used with UDP (it has not too big binary frames that do not depend on the reception order)
|
|
|
|
- asynchronous full-duplex multithreaded RPC: any number commands from both parties can be executed in parallel.
|
|
|
|
- coroutine-based, fast implementation.
|
|
|
|
- compile-time types/invokation checks
|
|
|
|
- out of the box fast coroutine based websocket client (JVM+JS) and setver (JVM:ktor) implementations are provided.
|
|
|
|
- Kotlin Multiplatform: works the same in JVM/JS (and android too)
|
|
|
|
The protocol is a result of reconsidering the pratcial usage of its predecessor, parsec2 protocol. This version is not a part of the Universa effort but an independent personal project of universa CTO.
|
|
|
|
## Status
|
|
|
|
Transport layer for wbesockets is being tested in commercial environment, while its public interface still is in aplpha stage and is not yet frozen.
|
|
|
|
Secure layer is not yet published, as R&D and desting are still under way.
|
|
|
|
You can try and use transport layer but be prepared to minor interface changes.
|
|
|
|
## Installation
|
|
|
|
|
|
```kotlin
|
|
repsitories {
|
|
// ...
|
|
maven("https://maven.universablockchain.com")
|
|
|
|
}
|
|
|
|
//...
|
|
dependencies {
|
|
api("net.sergeych:parsec3:0.3.3")
|
|
}
|
|
```
|
|
|
|
## Usage
|
|
|
|
Please see as an example the test [WsServerKtTest.kt](src%2FjvmTest%2Fkotlin%2Fnet%2Fsergeych%2Fparsec3%2FWsServerKtTest.kt)
|
|
|
|
## FAQ
|
|
|
|
Not yet
|
|
|
|
### Why not github?
|
|
|
|
Two reasons:
|
|
|
|
1. I don't want to depend on US crazy ideas like limit usage of its services to anybody who their governent won't like next week.
|
|
2. My ethic is against usage of open source in _paid services_ like gothub's copilot.
|
|
|
|
### Why not universa?
|
|
|
|
Again, two reasons:
|
|
|
|
1. This is my own project, I don't want to get under any trademark, codes and whatever limits.
|
|
|
|
2. Its security model is intended to be more universal than just universa to use more trust sources, so it is again not ethically adequate to develop it using universa resources.
|
|
|
|
## LICENSE
|
|
|
|
Will soon be published under MIT or similar. |