{"data":{"markdownRemark":{"html":"<p>For release notes for previous versions, please see <a href=\"./release-notes/release-history\">Release History</a></p>\n<h2 id=\"210\"><a href=\"#210\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2.1.0</h2>\n<p><em>30th October 2018</em></p>\n<p>This is a major release, featuring improvements to data output, messaging APIs and scenario execution.</p>\n<blockquote>\n<p>Insert summary and links to 2.1 headline features here.</p>\n</blockquote>\n<h1 id=\"migrating-to-21-from-20x\"><a href=\"#migrating-to-21-from-20x\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Migrating to 2.1 from 2.0.x</h1>\n<h2 id=\"messaging-api-changes\"><a href=\"#messaging-api-changes\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Messaging API Changes</h2>\n<p>The <code class=\"language-text\">sendMessage</code> and <code class=\"language-text\">broadcastMessage</code> APIs have been reworked, and the way <code class=\"language-text\">Message</code> and <code class=\"language-text\">Link</code> types are defined and retrieved have also been updated.</p>\n<h3 id=\"blanklink-removal\"><a href=\"#blanklink-removal\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>BlankLink removal</h3>\n<p>The default link type <code class=\"language-text\">BlankLink</code> has been removed, and so when constructing links via connectors you will now always need to define and declare your link type. This has been done to encourage the good modelling practice of naming the relations you are defining, as this can become confusing when transitioning from simple models to more complicated ones.</p>\n<h3 id=\"messaging-api\"><a href=\"#messaging-api\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Messaging API</h3>\n<p>For <code class=\"language-text\">broadcastMessage</code>, a new fluent API now provides the capability to filter and customise messages sent based on the link the message will be sent along. As well as this, the capability to broadcast along all link types has been removed as this was rarely the modeller's intention once multiple link types are defined, and could cause confusing and unexpected behaviour.</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token comment\">/// 2.0</span>\n\ncell<span class=\"token punctuation\">.</span><span class=\"token function\">broadcastMessage</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">Messages<span class=\"token punctuation\">.</span>Aliveness</span><span class=\"token punctuation\">(</span>cell<span class=\"token punctuation\">.</span>alive<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n\t\t\t\t\t\t\t\t\t\t\tLinks<span class=\"token punctuation\">.</span>Neighbour<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Any message received is inside a wrapper Message type</span>\nMessage<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Messages<span class=\"token punctuation\">.</span>Aliveness<span class=\"token punctuation\">></span></span> m <span class=\"token operator\">=</span> cell<span class=\"token punctuation\">.</span><span class=\"token function\">getMessageOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>Aliveness<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">/// 2.1</span>\n\n<span class=\"token comment\">// Using a generic message class.</span>\ncell<span class=\"token punctuation\">.</span><span class=\"token function\">getLinks</span><span class=\"token punctuation\">(</span>Links<span class=\"token punctuation\">.</span>Neighbour<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>Aliveness<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>msg<span class=\"token punctuation\">,</span> link<span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span><span class=\"token operator\">></span> msg<span class=\"token punctuation\">.</span>alive <span class=\"token operator\">=</span> cell<span class=\"token punctuation\">.</span>alive<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Using a specialised message class (shown below)</span>\n<span class=\"token comment\">// Here the value given is assigned into the body</span>\n<span class=\"token comment\">// of the constructed messages automatically.</span>\ncell<span class=\"token punctuation\">.</span><span class=\"token function\">getLinks</span><span class=\"token punctuation\">(</span>Links<span class=\"token punctuation\">.</span>Neighbour<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>Aliveness<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> cell<span class=\"token punctuation\">.</span>alive<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// New functionality, customising and filtering messages sent</span>\n<span class=\"token comment\">// using link information.</span>\ncell<span class=\"token punctuation\">.</span><span class=\"token function\">getLinks</span><span class=\"token punctuation\">(</span>Links<span class=\"token punctuation\">.</span>Neighbour<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n    <span class=\"token comment\">/* filter messages sent based on link */</span>\n\t\t<span class=\"token punctuation\">.</span><span class=\"token function\">filter</span><span class=\"token punctuation\">(</span>link <span class=\"token operator\">-</span><span class=\"token operator\">></span> link<span class=\"token punctuation\">.</span>property <span class=\"token operator\">&lt;</span> <span class=\"token number\">100</span><span class=\"token punctuation\">)</span>\n    <span class=\"token comment\">/* can set message body based on link attributes */</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>Aliveness<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n          <span class=\"token punctuation\">(</span>msg<span class=\"token punctuation\">,</span> link<span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span><span class=\"token operator\">></span> msg<span class=\"token punctuation\">.</span><span class=\"token function\">setBody</span><span class=\"token punctuation\">(</span>link<span class=\"token punctuation\">.</span>property <span class=\"token operator\">></span> some_condition<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Any message received is now the message type itself</span>\nMessages<span class=\"token punctuation\">.</span>Aliveness m <span class=\"token operator\">=</span> cell<span class=\"token punctuation\">.</span><span class=\"token function\">getMessageOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>Aliveness<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>For direct messaging with <code class=\"language-text\">sendMessage</code>, the same message construction API based around <code class=\"language-text\">Agent#send</code> is used, but using <code class=\"language-text\">Messaging#to</code> to define the subsequent destination.</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token comment\">// 2.0</span>\ncell<span class=\"token punctuation\">.</span><span class=\"token function\">sendMessage</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">Messages<span class=\"token punctuation\">.</span>Aliveness</span><span class=\"token punctuation\">(</span>cell<span class=\"token punctuation\">.</span>alive<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> sender<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\">// 2.1</span>\ncell<span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>Aliveness<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> cell<span class=\"token punctuation\">.</span>alive<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">to</span><span class=\"token punctuation\">(</span>sender<span class=\"token punctuation\">)</span></code></pre></div>\n<h3 id=\"message-and-link-classes\"><a href=\"#message-and-link-classes\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Message and Link classes</h3>\n<p>User-defined message and link types should now extend the built-in <code class=\"language-text\">Message</code> and <code class=\"language-text\">Link</code> classes. These classes should not define any constructor that requires parameters. There are also builtin special classes for messages containing a single primitive, e.g. <code class=\"language-text\">Message.Boolean</code>, <code class=\"language-text\">Message.Double</code>, etc. When using these types, there is a convenient shorthand when constructing messages, as shown above.</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token comment\">// 2.0</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Messages</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Aliveness</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">boolean</span> alive<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token function\">Aliveness</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">boolean</span> alive<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>alive <span class=\"token operator\">=</span> alive<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">// 2.1</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Messages</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// Generic Message</span>\n\t<span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Aliveness</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Message</span> <span class=\"token punctuation\">{</span>\n\t\t<span class=\"token keyword\">public</span> <span class=\"token keyword\">boolean</span> alive<span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\n  <span class=\"token comment\">// Extending the special message class</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Aliveness</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Message<span class=\"token punctuation\">.</span>Boolean</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Links should similarly extend the <code class=\"language-text\">Link</code> class. There is a single specialisation of link currently, <code class=\"language-text\">Link.Empty</code>, that may provide optimisation benefits in the future.</p>\n<h2 id=\"licensing\"><a href=\"#licensing\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Licensing</h2>\n<p>The Simudyne SDK now requires an individually issued license file in order to function. These license files should be requested from Simudyne. Detailed information on licensing restrictions for the SDK can be seen under <a href=\"./reference/licensing\">Licensing Documentation</a>.</p>","headings":[{"value":"2.1.0","depth":2},{"value":"Migrating to 2.1 from 2.0.x","depth":1},{"value":"Messaging API Changes","depth":2},{"value":"BlankLink removal","depth":3},{"value":"Messaging API","depth":3},{"value":"Message and Link classes","depth":3},{"value":"Licensing","depth":2}],"frontmatter":{"title":"Release Notes","toc":true,"experimental":null}},"site":{"siteMetadata":{"title":"Simudyne Docs","latestVersion":"2.6"}}},"pageContext":{"absolutePath":"/home/vsts/work/1/s/content/2.1/docs/release-notes.md","versioned":true,"version":"2.1","kind":"docs","pagePath":"/release-notes","chronology":{"prev":{"name":"Coordinator Pattern","path":"/practices/coordinator-pattern"},"next":{"name":"History","path":"/release-notes/release-history"}},"lastUpdated":"2026-04-21T13:56:54.829Z"}}