How to Use Mscgen

Training Guide: How to Use Mscgen

Introduction

Mscgen is a tool used to create simple and visually appealing Message Sequence Charts (MSCs). It takes a text-based description of an MSC and generates an image of the chart. This guide will help you understand the basics of using Mscgen to create MSCs for your projects.


Text Editor: Use any text editor to write .msc files (e.g., Notepad++, VS Code, or a simple text editor).


Structure of an Mscgen File

An Mscgen input file is written in a simple scripting language. The general structure is as follows:

msc {
    // Define nodes
    A, B, C;

    // Messages between participants
    A->B [label="Message 1"];
    B->C [label="Message 2"];
    C=>A [label="Reply"];
}

pcap2mscjs_01

Key Components:

  1. msc {}: The chart is defined within curly braces.
  2. Participants: Use participant to define the entities involved in communication.
  3. Messages: Use -> for standard messages, => for asynchronous messages, and <- for reverse messages.
  4. Labels: Add labels to messages using [label=""].

Step-by-Step Guide to Creating an MSC

1. Define Participants

Participants represent entities (e.g., users, systems, or services).

 Alice, Bob;

2. Create Messages

Messages are the interactions between participants.

  • Synchronous Messages:
    Alice->Bob [label="Hello"];
  • Asynchronous Messages:
    Alice=>Bob [label="Ping"];
  • Return Messages:
    Bob<-Alice [label="Reply"];

3. Add Comments

Comments can be added using // for single-line comments or /* */ for multi-line comments.

// This is a single-line comment
/* This is a
   multi-line comment */

4. Organize Your Chart

You can group messages and add delays using keywords like rbox for highlighting regions and ... for delays.

rbox "Transaction" {
    Alice->Bob [label="Request"];
    Bob->Alice [label="Response"];
}

...

Alice->Bob [label="Another Message"];

Advanced Features

Lifelines

To add lifelines for participants:

Alice;
Bob;
Alice->Bob [label="Start"];
--- [label="End"];

Inline Participant Definitions

You can define participants inline while sending a message:

A->B [label="Hello"];

Grouping Messages

Highlight sections or group related messages using:

rbox "Group Title" {
    A->B [label="Message 1"];
    B->C [label="Message 2"];
}

Tips and Tricks

  • Keep labels concise and clear to improve readability.
  • Use comments to document your .msc files.

Examples

Example 1: Simple Chat

msc {
    participant User, System;

    User->System [label="Login Request"];
    System->User [label="Login Response"];
}

Example 2: Multi-Step Process

msc {
    participant A, B, C;

    A->B [label="Step 1"];
    B->C [label="Step 2"];
    C->A [label="Step 3"];
}