Kuestenlogik.Bowline.Protocol.Dis 0.9.4

Prefix Reserved
The owner has unlisted this package. This could mean that the package is deprecated, has security vulnerabilities or shouldn't be used anymore.
dotnet add package Kuestenlogik.Bowline.Protocol.Dis --version 0.9.4
                    
NuGet\Install-Package Kuestenlogik.Bowline.Protocol.Dis -Version 0.9.4
                    
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="Kuestenlogik.Bowline.Protocol.Dis" Version="0.9.4" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Kuestenlogik.Bowline.Protocol.Dis" Version="0.9.4" />
                    
Directory.Packages.props
<PackageReference Include="Kuestenlogik.Bowline.Protocol.Dis" />
                    
Project file
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 Kuestenlogik.Bowline.Protocol.Dis --version 0.9.4
                    
#r "nuget: Kuestenlogik.Bowline.Protocol.Dis, 0.9.4"
                    
#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 Kuestenlogik.Bowline.Protocol.Dis@0.9.4
                    
#: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=Kuestenlogik.Bowline.Protocol.Dis&version=0.9.4
                    
Install as a Cake Addin
#tool nuget:?package=Kuestenlogik.Bowline.Protocol.Dis&version=0.9.4
                    
Install as a Cake Tool

Kuestenlogik.Bowline.Protocol.Dis

Bowline protocol plugin for IEEE 1278.1 Distributed Interactive Simulation (DIS).

Two paths into a DIS multicast group:

  • Live discovery + entity-scoped streaming — point Bowline at a dis://group:port URL and the workbench probes the group, surfaces every active entity as a service, and streams typed PDU envelopes (filtered to that entity, or to the whole exercise feed) into the workbench.
  • Mock replay — DisMockEmitter plugs into Bowline's mock server so a captured PDU sequence can be re-broadcast on UDP at the original cadence. Use it for offline testing without a live exercise.

URL shapes

dis://239.1.2.3:3000          # standard multicast group + DIS port
dis://multicast               # shortcut for 239.1.2.3 (default port)
239.1.2.3:3000                # bare host:port also accepted

The default group is 239.1.2.3 and the default port is 3000 (IEEE 1278 convention). The probe duration during discovery is configurable via the plugin's probeDuration setting (defaults to 3 seconds — long enough to catch a heartbeat from every active entity, short enough that the workbench feels responsive).

Live discovery

Standalone:

bowline --url dis://239.1.2.3:3000

Embedded:

app.MapBowline(options =>
{
    options.ServerUrls.Add("dis://239.1.2.3:3000");
});

DiscoverAsync joins the multicast group for the configured probe window, observes every EntityState PDU it sees, and surfaces:

  • one synthetic Exercise service whose monitor stream yields every PDU on the group (raw exercise feed)
  • one service per discovered entity, named after its EntityId (<site>:<application>:<entity>) plus marking + entity-type info, whose monitor stream yields only PDUs from that entity

Subscribing to a service opens a UDP socket on the same group and yields one JSON envelope per matched PDU. The envelope decodes the PDU header (kind, family, exercise id, timestamp) plus EntityState specifics (position, orientation, velocity, marking string, force id) when applicable; other PDU kinds surface header + raw bytes so they can still be hex-dumped in the workbench.

Mock replay

DisMockEmitter plugs into Bowline's mock server via IBowlineMockEmitter. Recordings tagged protocol: "dis" get re-broadcast on the configured multicast group at the original cadence:

Metadata key (first DIS step) Purpose Default
multicast-group UDP multicast destination 239.1.2.3
port UDP port 3000
ttl Multicast TTL — 1 keeps it on the local subnet 1

Each step carries:

  • protocol: "dis"
  • responseBinary — base64 of the raw PDU bytes (IEEE 1278 wire format)
  • capturedAt — millisecond timestamp used for emission pacing
  • optional metadata (only on the first DIS step — applied to the whole DIS sub-sequence)

Use bowline mock --recording my-exercise.bowline-recording.json to start replay. --loop re-emits the sequence on repeat.

Install

dotnet tool install -g Kuestenlogik.Bowline.Tool
bowline plugin install Kuestenlogik.Bowline.Protocol.Dis

Local development

This plugin lives in its own repo so the external-plugin distribution pipeline gets exercised end-to-end. For local dev against an unpublished core Bowline:

  1. cd ../Bowline && dotnet pack -c Release — produces .nupkgs for Kuestenlogik.Bowline and Kuestenlogik.Bowline.Mock under artifacts/packages/.
  2. This repo's nuget.config adds that directory as a package source, so dotnet restore && dotnet build && dotnet test here picks up the freshly-packed contract packages.
  3. Smoke-test end-to-end by dropping the built plugin DLL into ~/.bowline/plugins/Kuestenlogik.Bowline.Protocol.Dis/ (or wherever bowline --plugin-dir points) and running either bowline --url dis://239.1.2.3:3000 for live discovery or bowline mock --recording dis-sample.json for replay.

Once Bowline's core packages are on nuget.org, the local feed in nuget.config becomes redundant — consumers resolve the dependencies directly and this repo becomes a pure NuGet package.

Status

  • Live discovery + entity-scoped PDU streaming: shipped. EntityState PDUs decode markings, entity types, force ids; other PDU kinds surface header + raw bytes for hex-dumping.
  • Mock replay: shipped (raw byte replay only — the emitter doesn't re-decode; it ships the captured bytes verbatim).
  • Composition with the UDP plugin: run both at once for typed (dis) plus raw-bytes (udp) views of the same group.

License

Apache-2.0 — see LICENSE.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  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.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated