<?xml version="1.0"?>
<atom:feed xmlns:atom="http://www.w3.org/2005/Atom" xmlns:html="http://www.w3.org/1999/xhtml">
  <atom:id>http://bill.welliver.org/atom/pike/Fins/Developer/Stomp</atom:id>
  <atom:title type="text">electronic.alchemy :: Stomp</atom:title>
  <atom:updated>2026-05-23T23:11:50-04:00</atom:updated>
  <atom:link href="http://bill.welliver.org/atom/pike/Fins/Developer/Stomp" type="application/atom+xml"></atom:link>
  <atom:link href="http://bill.welliver.org/space/pike/Fins/Developer/Stomp" type="text/html"></atom:link>
  <atom:link href="http://bill.welliver.org/rss/pike/Fins/Developer/Stomp" type="application/rss+xml"></atom:link>
  <atom:generator uri="http://modules.gotpike.org/blahblah/Public.Syndication.ATOM" version="0.1">Public.Syndication.ATOM (Pike v8.0 release 702)</atom:generator>
  <atom:icon>http://bill.welliver.org/favicon.ico</atom:icon>
  <atom:logo>http://bill.welliver.org/static/images/alchemy.gif</atom:logo>
  <atom:subtitle type="xhtml"><html:div xmlns:html="http://www.w3.org/1999/xhtml"><html:h3 class="heading-1">Creating a Stomp-enabled application</html:h3><html:p class="paragraph"/>
Fins has support for sending and receiving messages via the <html:a href="Stomp" class="wiki_link_external">http://stomp.github.com/</html:a> protocol. This support is broken into three parts: &#xD;
<html:ol>
<html:li>a processor that acts as the central coordination point for Stomp communications</html:li>
<html:li>a controller class that you implement in order to process messages received from a destination</html:li>
<html:li>a class that can be inherited anywhere you want to be able to publish messages</html:li>
</html:ol>For a complete example, see the Stomper application, located in the <html:a href="HG repository" class="wiki_link_external">http://hg.welliver.org/stomper</html:a><html:p class="paragraph"/>
<html:b class="bold">Enabling message receipt and processing</html:b><html:p class="paragraph"/>
1. enable Stomp support for your Message Broker (see <html:span class="nobr"><html:img height="9" width="8" src="/static/images/Icon-Extlink.png" alt="[external]"/><html:a href="http://stomp.codehaus.org">http://stomp.codehaus.org</html:a></html:span> for more details.)<html:p class="paragraph"/>
2. install Public.Protocols.Stomp from monger.<html:p class="paragraph"/>
<html:div class="code"><html:pre><html:pre>&#xD;
  pike -x monger --install Public.Protocols.Stomp&#xD;
</html:pre></html:pre></html:div><html:p class="paragraph"/>
&#xD;
3. add the following to your application configuration file:<html:p class="paragraph"/>
<html:div class="code"><html:pre><html:pre>&#xD;
[processors]&#xD;
class=my_stomp_processor<html:p class="paragraph"/>
[stomp]&#xD;
broker=stomp:<html:font color="red">//user:pass@host:port&#xD;
</html:font></html:pre></html:pre></html:div><html:p class="paragraph"/>
&#xD;
4. create a class, my_stomp_processor (as mentioned in the configuration file above) that inherits Fins.StompProcessor, saved in the classes directory of your application.<html:p class="paragraph"/>
<html:div class="code"><html:pre><html:pre>&#xD;
  <html:b><html:font color="darkblue">inherit</html:font></html:b> Fins.StompProcessor;&#xD;
</html:pre></html:pre></html:div><html:p class="paragraph"/>
&#xD;
5. create a controller class that inherits Fins.StompController and overrides the constant <html:i class="ital">subscribes_to</html:i>. The constant <html:i class="ital">subscribes_to</html:i> should be a STOMP messaging destination. This example code might be called <html:i class="ital">classes/my_stomp_controller.pike</html:i>:<html:p class="paragraph"/>
<html:div class="code"><html:pre><html:pre>&#xD;
  <html:b><html:font color="darkblue">inherit</html:font></html:b> Fins.StompController;<html:p class="paragraph"/>
  <html:b><html:font color="darkblue">constant</html:font></html:b> subscribes_to = <html:i><html:font color="darkred">"/queue/my_queue"</html:font></html:i>;&#xD;
</html:pre></html:pre></html:div><html:p class="paragraph"/>
&#xD;
6. mount that new StompController class within your controller tree, just as you would with any other controller. its location doesn't matter, and it makes sense to mark it static. For example, from your <html:i class="ital">controller.pike</html:i>:<html:p class="paragraph"/>
<html:div class="code"><html:pre><html:pre><html:p class="paragraph"/>
  <html:b><html:font color="darkblue">inherit</html:font></html:b> Fins.FinsController;<html:p class="paragraph"/>
  Fins.Controller my_stomp_controller;<html:p class="paragraph"/>
  <html:b><html:font color="darkgreen">void </html:font></html:b><html:b><html:font color="darkbrown">start</html:font></html:b>()&#xD;
  {&#xD;
     my_stomp_controller = load_controller(<html:i><html:font color="darkred">"my_stomp_controller"</html:font></html:i>);&#xD;
  }<html:p class="paragraph"/>
</html:pre></html:pre></html:div><html:p class="paragraph"/>
<html:p class="paragraph"/>
7. implement <html:i class="ital">on_message()</html:i> in your Stomp controller. For example, in our <html:i class="ital">my_stomp_controller.pike</html:i> described above:<html:p class="paragraph"/>
<html:div class="code"><html:pre><html:pre>&#xD;
  <html:b><html:font color="darkblue">inherit</html:font></html:b> Fins.StompController;<html:p class="paragraph"/>
  <html:b><html:font color="darkblue">constant</html:font></html:b> subscribes_to = <html:i><html:font color="darkred">"/queue/my_queue"</html:font></html:i>;<html:p class="paragraph"/>
  <html:b><html:font color="darkgreen">void </html:font></html:b><html:b><html:font color="darkbrown">on_message</html:font></html:b>(Fins.StompRequest request)&#xD;
  {&#xD;
     <html:font color="red">// handle the message here.&#xD;
</html:font>     werror(<html:i><html:font color="darkred">"Headers: %O&amp;#110;"</html:font></html:i>, request-&gt;headers);&#xD;
     werror(<html:i><html:font color="darkred">"Body: %O&amp;#110;"</html:font></html:i>, request-&gt;body);&#xD;
  }&#xD;
</html:pre></html:pre></html:div><html:p class="paragraph"/>
&#xD;
<html:b class="bold">Enabling message publishing</html:b><html:p class="paragraph"/>
1. Publishing requires the StompProcessor to be enabled for your application, so if you only want to send messages, you don't need to define a StompController (steps 5-7) above.<html:p class="paragraph"/>
2. Messaging works from any class derived from <html:i class="ital">Fins.FinsBase</html:i>, which is any Controller, the View or Model.<html:p class="paragraph"/>
3. Inherit Fins.StompMessenger in the class you want to be able to send messages from.<html:p class="paragraph"/>
4. To send a message, you can use the <html:i class="ital">publish()</html:i> method provided in Fins.StompMessenger.<html:p class="paragraph"/>
<html:div class="code"><html:pre><html:pre>&#xD;
  <html:b><html:font color="darkblue">inherit</html:font></html:b> Fins.StompController;&#xD;
  <html:b><html:font color="darkblue">inherit</html:font></html:b> Fins.StompMessenger;<html:p class="paragraph"/>
  <html:b><html:font color="darkblue">constant</html:font></html:b> subscribes_to = <html:i><html:font color="darkred">"/queue/my_queue"</html:font></html:i>;<html:p class="paragraph"/>
  <html:b><html:font color="darkgreen">void </html:font></html:b><html:b><html:font color="darkbrown">on_message</html:font></html:b>(Fins.StompRequest request)&#xD;
  {&#xD;
     <html:font color="red">// handle the message here.&#xD;
</html:font>     werror(<html:i><html:font color="darkred">"Headers: %O&amp;#110;"</html:font></html:i>, request-&gt;headers);&#xD;
     werror(<html:i><html:font color="darkred">"Body: %O&amp;#110;"</html:font></html:i>, request-&gt;body);&#xD;
     <html:font color="red">// publish() is provided by StompMessenger.&#xD;
</html:font>     publish(<html:i><html:font color="darkred">"/topics/my_topic"</html:font></html:i>, <html:i><html:font color="darkred">"thanks for the message."</html:font></html:i>, ([<html:i><html:font color="darkred">"header1"</html:font></html:i>: <html:i><html:font color="darkred">"somevalue"</html:font></html:i>]));&#xD;
  }&#xD;
</html:pre></html:pre></html:div><html:p class="paragraph"/>
</html:div></atom:subtitle>
</atom:feed>
