You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Tristan B. Velloza Kildaire 6ed46d051c
Switch to niknaks (#4)
7 months ago
.github/workflows Pipelines 7 months ago
source/bformat Switch to niknaks (#4) 7 months ago
.gitignore - Added unit tests 1 year ago
LICENSE - Updated LICENSE to LGPL 3.0 1 year ago REAMDE 7 months ago
dub.json Switch to niknaks (#4) 7 months ago


D DUB DUB DUB Coverage Status

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.


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
	UnixAddress unixAddr = new UnixAddress("/tmp/bformatServer.sock");

		import std.stdio;

	Socket serverSocket = new Socket(AddressFamily.UNIX, SocketType.STREAM);

	class ServerThread : Thread
		private Socket servSock;

		this(Socket servSock)
			this.servSock = servSock;

		private void worker()
			Socket clientSock = servSock.accept();

			BClient bClient = new BClient(clientSock);

			byte[] message = cast(byte[])"ABBA";

	Thread serverThread = new ServerThread(serverSocket);

	Socket client = new Socket(AddressFamily.UNIX, SocketType.STREAM);
	BClient bClient = new BClient(client);

	byte[] receivedMessage;
	assert(receivedMessage == "ABBA");

Adding to your peoject

It's rather easy to add it to your D project, just run the command dub add bformat.


The license used is LGPL v3.