HyssosTech.Sdk.C2SIM 1.1.0

Prefix Reserved
There is a newer version of this package available.
See the version list below for details.
dotnet add package HyssosTech.Sdk.C2SIM --version 1.1.0                
NuGet\Install-Package HyssosTech.Sdk.C2SIM -Version 1.1.0                
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="HyssosTech.Sdk.C2SIM" Version="1.1.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add HyssosTech.Sdk.C2SIM --version 1.1.0                
#r "nuget: HyssosTech.Sdk.C2SIM, 1.1.0"                
#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.
// Install HyssosTech.Sdk.C2SIM as a Cake Addin
#addin nuget:?package=HyssosTech.Sdk.C2SIM&version=1.1.0

// Install HyssosTech.Sdk.C2SIM as a Cake Tool
#tool nuget:?package=HyssosTech.Sdk.C2SIM&version=1.1.0                

C2SIM SDK

Resources for controlling state and handling messages in a C2SIM environment. For an overview of C2SIM and its capabilities to support multiple connected Command and Control (C2) and Simulation systems, see the C2SIM Server Reference Implementation Documentation

The focus of the SDK is specifically on the C2SIM protocol, rather than legacy ones (e.g. CBML, IBML, IBML9, MSDL) which may be supported by C2SIM environments as well.

The SDK is built on top of generic capabilities offered by a (ported) Client Library, configured with specific parameters obtained by examining the C2SIM GUI Editor code use of the Java C2SIMClientLib.

In a nutshell, the SDK:

  • Wraps a series of basic Library Commands required to make a C2SIM server transition to a state where it is ready to accept Initializations, or Orders, or to join an ongoing session
  • Issues Library messages with required parameters for pushing specific messages containing Orders, Initializations and Reports
  • Serializes and deserializes XML messages from/into plain old C# objects
  • Exposes generic Library (STOMP) notification messages as finer grained events signaling the reception of Initialization, Orders, Reports, and server status changes

Nuget Install

The HyssosTeck.Sdk.C2SIM nuget provides support for:

  • .NET 6 projects
  • .NET Standard 2.0 - compatible with recent .NET Framework projects

As such, it should be compatible with Windows, macOs and Linux platforms, provided these have the required .NET Runtime/SDK installed

Quick Start

  1. Create a C2SIMSDK object pointing to a C2SIM server

    // ... obtain reference to logger that should be used by the SDK
    ILogger logger = null; // Create an appropriate logger here
    C2SIMSDK c2SimSDK = new C2SIMSDK(
        logger,
        new C2SIMSDKSettings(
            // Id string of this app - use C2SIMSDK.GetMachineID() to get a unique id based on the client hardware
            <submitter id>, 
            // Full C2SIM server endpoint, including host:port/path, e.g. "http://10.2.10.30:8080/C2SIMServer"
            <rest endpoint>, 
            // C2SIM server password
            <rest password>        
            // Full STOMP service endpoint, including host:port/destination, e.g. "http://10.2.10.30:61613/topic/C2SIM"
            <stomp endpoint>, 
            // Protocol - could also be "BML" for example, but the SDK focuses on C2SIM
            "SISO-STD-C2SIM",
            // Version of the protocol - 1.0.0 is the published standard
            "1.0.0"
        )
    );
    

    NOTE: the SDK supports Dependency Injection as part of a .NET Generic Host, which simplifies handling of logging and configuration settings. See the Sample App for an example of how to implement that.

  2. Subscribe to notification events

    c2SimSDK.StatusChangedReceived += C2SimSDK_StatusChangedReceived;
    c2SimSDK.InitializationReceived += C2SimSDK_InitializationReceived;
    c2SimSDK.OderReceived += C2SimSDK_OderReceived;
    c2SimSDK.ReportReceived += C2SimSDK_ReportReceived;
    
  3. Establish the connection to the C2SIM notification service to start the message flow

    try
    {
        // Connect to the notification service to start receiving messages
        await c2SimSDK.Connect();
    }
    catch (Exception e)
    {
        string msg = e.InnerException != null ? e.InnerException.Message : e.Message;
        // Handle error
        // ...
    }
    
  4. Send commands and messages as required

    See the C2SIM .NET SDK Reference for details of the methods summarized below

    1. Change the state of the server
      • ResetToInitializing() - get the server to an Initializing state, issuing STOP, RESET, INITIALIZE individual commands as needed
      • SwitchToRunning() - get the server to a Running state, issuing SHARE, START individual commands as needed
      • JoinSession() - get the server to issue a late join notification, eventually causing an InitializationReceived event to be triggered
    2. Push messages
      • PushInitializationMessage()
      • PushOrderMessage()
      • PushReportMessage()
    3. Access to raw Library functionality
      • PushCommand() - C2SIM server commands: STOP, RESET, INITIALIZE, SHARE, START, PAUSE, STATUS, QUERYINIT (see C2SIM Server Message Flow for details)
      • PushMessage() - client configured XML messages

Sample app

The methods above are used in a sample app, which accepts commands and messages interactively and sends them to a server. The app also displays notifications received from a server, and can provide insight into the traffic generated by the sample itself or other apps connected to the same server, e.g. the Sketch-Thru-Plan Planning Workstation, as can be seen in this demo.

Objects generated from the C2SIM XSD

Classes representing the four main types of C2SIM messages were generated from the Schemas using the xsd tool:

xsd schemas\C2SIM_SMX_LOX_V1.0.1.xsd /c /l:CS

MessageBody.Item contains a reference to one of the messages of interest, differentiated by the following types:

  • Schemas.SystemCommandBodyType - Command results notifications (see the NOTE below)
  • Schemas.C2SIMInitializationBodyType - Initialization message notification
  • Schemas.DomainMessageBodyType - Contains sub-types of interest
    • Schemas.OrderBodyType - Order message notification
    • Schemas.ReportBodyType - Report message notification

NOTE: SystemCommandBodyType's schema definition does not match the actual content of messages received from the current C2SIM Reference Server (v4.8.0.11):

  • SystemCommandBodyType includes an additional element - SessionStateCode
  • SystemCommandTypeCodeType includes an additional ResetScenario enumeration

A separate augmented C2SIM_SMX_LOX_v1.0.0_Command.xsd containing these elements has been created, and a corresponding set of classes is used here instead of the standard one so that the server responses can be processed.

xsd schemas\C2SIM_SMX_LOX_v1.0.0_Command.xsd /c /l:CS /n:CustomSchemas
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos 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
1.3.0 123 4/17/2024
1.2.14 245 11/21/2023
1.2.13 201 6/9/2023
1.2.12 183 6/8/2023
1.2.11 172 6/7/2023
1.2.10 195 4/27/2023
1.2.9 370 11/8/2022
1.2.9-pre 165 11/8/2022
1.2.8 450 5/18/2022
1.2.7 477 5/5/2022
1.2.6 478 4/21/2022
1.2.5 334 12/20/2021
1.2.5-prerelease 233 12/6/2021
1.2.4 364 12/3/2021
1.2.4-prerelease 224 12/2/2021
1.2.3 338 11/30/2021
1.2.3-prerelease 221 11/30/2021
1.2.2 338 11/30/2021
1.2.1 3,246 11/24/2021
1.2.0 5,679 11/24/2021
1.2.0-prerelease 4,696 11/24/2021
1.1.0 326 11/23/2021
1.0.0 1,314 11/17/2021
0.9.4-prerelease 249 11/16/2021
0.9.3-prerelease 244 11/16/2021
0.9.2-prerelease 204 11/16/2021
0.9.1-prerelease 220 11/16/2021
0.9.0-prerelease 253 11/16/2021
0.0.4-prerelease 246 11/15/2021
0.0.3-prerelease 243 11/15/2021
0.0.2-prerelease 214 11/15/2021
0.0.1-prerelease 241 11/15/2021