bformat 5.0.0
A simple message format for automatically length-prefixing messages over any socket or stream
To use this package, run the following command in your project's root directory:
Manual usage
Put the following dependency into your project's dependences section:
bformat
A simple message format for automatically length-prefixing messages over any Socket
or River-based Stream
.
What is bformat?
bformat makes it easy to build applications whereby you want to send data over a streaming interface (either a Socket
opened in SocketType.STREAM
mode or a River-based Stream
) and want to be able to read the data as length-prefixed messages, without the hassle of implementing this yourself. This is where bformat shines by providing support for this in a cross-platform manner so you do not have to worry about implementing it yourself countless times again every time you require such functionality in a project.
Usage
You can see the API for information on how to use it but it boils down to spawning a new BClient
which takes in either a Socket
or Stream
(see River) and then you can either send data using sendMessage(byte[])
and receive using receiveMessage(ref byte[])
.
Below we have an example application which does just this:
/**
* Create a server that encodes a message to the client
* and then let the client decode it from us; both making
* use of `BClient` to accomplish this
*/
unittest
{
UnixAddress unixAddr = new UnixAddress("/tmp/bformatServer.sock");
scope(exit)
{
import std.stdio;
remove(cast(char*)unixAddr.path());
}
Socket serverSocket = new Socket(AddressFamily.UNIX, SocketType.STREAM);
serverSocket.bind(unixAddr);
serverSocket.listen(0);
class ServerThread : Thread
{
private Socket servSock;
this(Socket servSock)
{
this.servSock = servSock;
super(&worker);
}
private void worker()
{
Socket clientSock = servSock.accept();
BClient bClient = new BClient(clientSock);
byte[] message = cast(byte[])"ABBA";
bClient.sendMessage(message);
}
}
Thread serverThread = new ServerThread(serverSocket);
serverThread.start();
Socket client = new Socket(AddressFamily.UNIX, SocketType.STREAM);
client.connect(unixAddr);
BClient bClient = new BClient(client);
byte[] receivedMessage;
bClient.receiveMessage(receivedMessage);
assert(receivedMessage == "ABBA");
writeln(receivedMessage);
writeln(cast(string)receivedMessage);
}
Adding to your peoject
It's rather easy to add it to your D project, just run the command dub add bformat
.
License
The license used is LGPL v3.
- Registered by Tristan B. Velloza Kildaire
- 5.0.0 released a year ago
- besterprotocol/bformat
- deavmi.assigned.network/projects/bformat/
- LGPL v3
- Copyright © 2023, Tristan B. Kildaire
- Authors:
- Dependencies:
- niknaks, river
- Versions:
-
5.0.0 2023-Oct-01 4.1.5 2023-Oct-01 4.1.4 2023-Oct-01 4.1.3 2023-Oct-01 4.1.2 2023-Jun-18 - Download Stats:
-
-
0 downloads today
-
0 downloads this week
-
1 downloads this month
-
392 downloads total
-
- Score:
- 0.2
- Short URL:
- bformat.dub.pm