urtware / doc / statediagrams / subscriber / urtSubscriberFetchMessage.svg @ 35c9457f
History | View | Annotate | Download (42.8 KB)
1 |
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="1455px" preserveAspectRatio="none" style="width:2068px;height:1455px;" version="1.1" viewBox="0 0 2068 1455" width="2068px" zoomAndPan="magnify"><defs><filter height="300%" id="f1f9rycf3tt47j" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="89" x="988.75" y="26.708">µRtWare</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="256" x="905.25" y="47.6611">urtSubscriberFetchMessage()</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="1036.25" y="68.6143"/><path d="M1096.25,72.8594 L1096.25,97.9922 A0,0 0 0 0 1096.25,97.9922 L1211.25,97.9922 A0,0 0 0 0 1211.25,97.9922 L1211.25,90.8594 L1231.25,85.4258 L1211.25,82.8594 L1211.25,82.8594 L1201.25,72.8594 L1096.25,72.8594 A0,0 0 0 0 1096.25,72.8594 " fill="#FBFB77" filter="url(#f1f9rycf3tt47j)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1201.25,72.8594 L1201.25,82.8594 L1211.25,82.8594 L1201.25,72.8594 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="94" x="1102.25" y="89.9263">event received</text><ellipse cx="1241.25" cy="85.4258" fill="#000000" filter="url(#f1f9rycf3tt47j)" rx="10" ry="10" style="stroke: none; stroke-width: 1.0;"/><path d="M798.25,122.4102 L798.25,147.543 A0,0 0 0 0 798.25,147.543 L1181.25,147.543 A0,0 0 0 0 1181.25,147.543 L1181.25,140.4102 L1201.25,134.9766 L1181.25,132.4102 L1181.25,132.4102 L1171.25,122.4102 L798.25,122.4102 A0,0 0 0 0 798.25,122.4102 " fill="#FBFB77" filter="url(#f1f9rycf3tt47j)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1171.25,122.4102 L1171.25,132.4102 L1181.25,132.4102 L1171.25,122.4102 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="362" x="804.25" y="139.4771">The message list is part of the topic and must be locked.</text><rect fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="80" x="1201.25" y="117.9922"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="60" x="1211.25" y="139.1309">lock topic</text><polygon fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" points="1187.75,171.9609,1294.75,171.9609,1306.75,183.9609,1294.75,195.9609,1187.75,195.9609,1175.75,183.9609,1187.75,171.9609" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="107" x="1187.75" y="187.769">Is HRT subscriber?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="1155.75" y="181.3667">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="1306.75" y="181.3667">no</text><rect fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="137" x="636.5" y="205.9609"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="117" x="646.5" y="227.0996">lock next message</text><rect fill="#FFFFFF" filter="url(#f1f9rycf3tt47j)" height="465.9175" style="stroke: #000000; stroke-width: 2.0;" width="1387" x="10" y="306.4419"/><path d="M124,307.4419 L124,315.7388 L114,325.7388 L10,325.7388 " fill="none" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="104" x="13" y="320.437">iterate to latest</text><path d="M413.5,347.1567 L413.5,372.2896 A0,0 0 0 0 413.5,372.2896 L616.5,372.2896 A0,0 0 0 0 616.5,372.2896 L616.5,365.1567 L636.5,359.7231 L616.5,357.1567 L616.5,357.1567 L606.5,347.1567 L413.5,347.1567 A0,0 0 0 0 413.5,347.1567 " fill="#FBFB77" filter="url(#f1f9rycf3tt47j)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M606.5,347.1567 L606.5,357.1567 L616.5,357.1567 L606.5,347.1567 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="182" x="419.5" y="364.2236">locked two messaged ahead</text><rect fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="137" x="636.5" y="342.7388"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="117" x="646.5" y="363.8774">lock next message</text><rect fill="#000000" filter="url(#f1f9rycf3tt47j)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="1322" x="44" y="452.418"/><rect fill="#000000" filter="url(#f1f9rycf3tt47j)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="1129" x="58" y="478.418"/><rect fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="304" x="72" y="504.418"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="284" x="82" y="525.5566">decremenet HRT counter of current message</text><path d="M404,508.8359 L404,533.9688 A0,0 0 0 0 404,533.9688 L893,533.9688 A0,0 0 0 0 893,533.9688 L893,526.8359 L913,521.4023 L893,518.8359 L893,518.8359 L883,508.8359 L404,508.8359 A0,0 0 0 0 404,508.8359 " fill="#FBFB77" filter="url(#f1f9rycf3tt47j)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M883,508.8359 L883,518.8359 L893,518.8359 L883,508.8359 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="468" x="410" y="525.9028">no lock required since this timer is only accessed when the topic is locked</text><rect fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="260" x="913" y="504.418"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="240" x="923" y="525.5566">update QoS delay timer (@subscriber)</text><rect fill="#000000" filter="url(#f1f9rycf3tt47j)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="1129" x="58" y="558.3867"/><rect fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="172" x="536.5" y="594.8711"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="152" x="546.5" y="616.0098">unlock current message</text><rect fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="137" x="1215" y="538.9023"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="117" x="1225" y="560.041">lock next message</text><rect fill="#000000" filter="url(#f1f9rycf3tt47j)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="1322" x="44" y="648.8398"/><polygon fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" points="551,396.7075,859,396.7075,871,408.7075,859,420.7075,551,420.7075,539,408.7075,551,396.7075" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="709" y="430.918">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="308" x="551" y="412.5156">Timestamp of next message is younger than current?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="525" y="406.1133">no</text><path d="M345.5,712.0938 L345.5,752.3594 A0,0 0 0 0 345.5,752.3594 L608.5,752.3594 A0,0 0 0 0 608.5,752.3594 L608.5,736.2266 L628.5,732.2266 L608.5,728.2266 L608.5,722.0938 L598.5,712.0938 L345.5,712.0938 A0,0 0 0 0 345.5,712.0938 " fill="#FBFB77" filter="url(#f1f9rycf3tt47j)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M598.5,712.0938 L598.5,722.0938 L608.5,722.0938 L598.5,712.0938 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="201" x="351.5" y="729.1606">one message ahead still locked</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="242" x="351.5" y="744.2935">but HRT counter not yet decremented</text><rect fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="153" x="628.5" y="715.2422"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="133" x="638.5" y="736.3809">unlock next message</text><polygon fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" points="618.5,259.9297,791.5,259.9297,803.5,271.9297,791.5,283.9297,618.5,283.9297,606.5,271.9297,618.5,259.9297" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="32" x="709" y="294.1401">latest</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="173" x="618.5" y="275.7378">Fetch next or latest message?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="24" x="803.5" y="269.3354">next</text><polygon fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" points="705,796.7617,717,808.7617,705,820.7617,693,808.7617,705,796.7617" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#000000" filter="url(#f1f9rycf3tt47j)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="1121" x="144.5" y="855.7617"/><rect fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="296" x="158.5" y="881.7617"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="276" x="168.5" y="902.9004">decrement HRT counter of current message</text><path d="M482.5,886.1797 L482.5,911.3125 A0,0 0 0 0 482.5,911.3125 L971.5,911.3125 A0,0 0 0 0 971.5,911.3125 L971.5,904.1797 L991.5,898.7461 L971.5,896.1797 L971.5,896.1797 L961.5,886.1797 L482.5,886.1797 A0,0 0 0 0 482.5,886.1797 " fill="#FBFB77" filter="url(#f1f9rycf3tt47j)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M961.5,886.1797 L961.5,896.1797 L971.5,896.1797 L961.5,886.1797 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="468" x="488.5" y="903.2466">no lock required since this timer is only accessed when the topic is locked</text><rect fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="260" x="991.5" y="881.7617"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="240" x="1001.5" y="902.9004">update QoS delay timer (@subscriber)</text><rect fill="#000000" filter="url(#f1f9rycf3tt47j)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="1121" x="144.5" y="935.7305"/><rect fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="166" x="1694.5" y="205.9609"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="146" x="1704.5" y="227.0996">lock last read message</text><rect fill="#FFFFFF" filter="url(#f1f9rycf3tt47j)" height="340.3979" style="stroke: #000000; stroke-width: 2.0;" width="516" x="1516.5" y="306.4419"/><path d="M1700.5,307.4419 L1700.5,315.7388 L1690.5,325.7388 L1516.5,325.7388 " fill="none" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="174" x="1519.5" y="320.437">find oldest valid message</text><rect fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="137" x="1709" y="342.7388"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="117" x="1719" y="363.8774">lock next message</text><rect fill="#000000" filter="url(#f1f9rycf3tt47j)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="454" x="1550.5" y="452.418"/><rect fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="165" x="1564.5" y="478.418"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="145" x="1574.5" y="499.5566">unlock current mesage</text><rect fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="233" x="1757.5" y="478.418"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="213" x="1767.5" y="499.5566">lock one message further ahaead</text><rect fill="#000000" filter="url(#f1f9rycf3tt47j)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="454" x="1550.5" y="532.3867"/><polygon fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" points="1644.5,396.7075,1910.5,396.7075,1922.5,408.7075,1910.5,420.7075,1644.5,420.7075,1632.5,408.7075,1644.5,396.7075" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="1781.5" y="430.918">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="266" x="1644.5" y="412.5156">Timestamp of next is younger then of current?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="1618.5" y="406.1133">no</text><rect fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="153" x="1701" y="592.8711"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="133" x="1711" y="614.0098">unlock next message</text><polygon fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" points="1691.5,259.9297,1863.5,259.9297,1875.5,271.9297,1863.5,283.9297,1691.5,283.9297,1679.5,271.9297,1691.5,259.9297" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="1781.5" y="294.1401">no</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="172" x="1691.5" y="275.7378">Timestamp equals local copy?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="1875.5" y="269.3354">yes</text><polygon fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" points="1777.5,671.2422,1789.5,683.2422,1777.5,695.2422,1765.5,683.2422,1777.5,671.2422" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#FFFFFF" filter="url(#f1f9rycf3tt47j)" height="340.0078" style="stroke: #000000; stroke-width: 2.0;" width="542" x="1449" y="776.8984"/><path d="M1563,777.8984 L1563,786.1953 L1553,796.1953 L1449,796.1953 " fill="none" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="104" x="1452" y="790.8936">iterate to latest</text><rect fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="137" x="1709" y="813.1953"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="117" x="1719" y="834.334">lock next message</text><rect fill="#000000" filter="url(#f1f9rycf3tt47j)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="365" x="1595" y="942.9688"/><rect fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="172" x="1609" y="968.9688"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="152" x="1619" y="990.1074">unlock current message</text><rect fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="137" x="1809" y="968.9688"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="117" x="1819" y="990.1074">lock next message</text><rect fill="#000000" filter="url(#f1f9rycf3tt47j)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="365" x="1595" y="1022.9375"/><polygon fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" points="1623.5,882.1641,1931.5,882.1641,1943.5,894.1641,1931.5,906.1641,1623.5,906.1641,1611.5,894.1641,1623.5,882.1641" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="1781.5" y="916.3745">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="308" x="1623.5" y="897.9722">Timestamp of next message is younger then current?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="1597.5" y="891.5698">no</text><path d="M1459,1075.3555 L1459,1100.4883 A0,0 0 0 0 1459,1100.4883 L1681,1100.4883 A0,0 0 0 0 1681,1100.4883 L1681,1093.3555 L1701,1087.9219 L1681,1085.3555 L1681,1085.3555 L1671,1075.3555 L1459,1075.3555 A0,0 0 0 0 1459,1075.3555 " fill="#FBFB77" filter="url(#f1f9rycf3tt47j)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1671,1075.3555 L1671,1085.3555 L1681,1085.3555 L1671,1075.3555 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="201" x="1465" y="1092.4224">one message ahead still locked</text><rect fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="153" x="1701" y="1070.9375"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="133" x="1711" y="1092.0762">unlock next message</text><polygon fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" points="1691,728.4961,1864,728.4961,1876,740.4961,1864,752.4961,1691,752.4961,1679,740.4961,1691,728.4961" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="32" x="1781.5" y="762.7065">latest</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="173" x="1691" y="744.3042">Fetch next or latest message?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="24" x="1876" y="737.9019">next</text><polygon fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" points="1777.5,1136.9063,1789.5,1148.9063,1777.5,1160.9063,1765.5,1148.9063,1777.5,1136.9063" style="stroke: #A80036; stroke-width: 1.5;"/><polygon fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" points="1241.25,1166.9063,1253.25,1178.9063,1241.25,1190.9063,1229.25,1178.9063,1241.25,1166.9063" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#000000" filter="url(#f1f9rycf3tt47j)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="604" x="939.25" y="1210.9063"/><rect fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="352" x="953.25" y="1236.9063"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="332" x="963.25" y="1258.0449">set last fetched message pointer to locked message</text><rect fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="196" x="1333.25" y="1236.9063"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="176" x="1343.25" y="1258.0449">copy timestamp of message</text><rect fill="#000000" filter="url(#f1f9rycf3tt47j)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="604" x="939.25" y="1290.875"/><rect fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="122" x="1180.25" y="1316.875"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="1190.25" y="1338.0137">unlock message</text><rect fill="#FEFECE" filter="url(#f1f9rycf3tt47j)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="96" x="1193.25" y="1370.8438"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="76" x="1203.25" y="1391.9824">unlock topic</text><ellipse cx="1241.25" cy="1434.8125" fill="none" filter="url(#f1f9rycf3tt47j)" rx="10" ry="10" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="1241.75" cy="1435.3125" fill="#000000" filter="url(#f1f9rycf3tt47j)" rx="6" ry="6" style="stroke: none; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1241.25" x2="1241.25" y1="95.4258" y2="117.9922"/><polygon fill="#A80036" points="1237.25,107.9922,1241.25,117.9922,1245.25,107.9922,1241.25,111.9922" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="224" x2="224" y1="484.418" y2="504.418"/><polygon fill="#A80036" points="220,494.418,224,504.418,228,494.418,224,498.418" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1043" x2="1043" y1="484.418" y2="504.418"/><polygon fill="#A80036" points="1039,494.418,1043,504.418,1047,494.418,1043,498.418" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="224" x2="224" y1="538.3867" y2="558.3867"/><polygon fill="#A80036" points="220,548.3867,224,558.3867,228,548.3867,224,552.3867" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1043" x2="1043" y1="538.3867" y2="558.3867"/><polygon fill="#A80036" points="1039,548.3867,1043,558.3867,1047,548.3867,1043,552.3867" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="622.5" x2="622.5" y1="564.3867" y2="594.8711"/><polygon fill="#A80036" points="618.5,584.8711,622.5,594.8711,626.5,584.8711,622.5,588.8711" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="622.5" x2="622.5" y1="458.418" y2="478.418"/><polygon fill="#A80036" points="618.5,468.418,622.5,478.418,626.5,468.418,622.5,472.418" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1283.5" x2="1283.5" y1="458.418" y2="538.9023"/><polygon fill="#A80036" points="1279.5,528.9023,1283.5,538.9023,1287.5,528.9023,1283.5,532.9023" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="622.5" x2="622.5" y1="628.8398" y2="648.8398"/><polygon fill="#A80036" points="618.5,638.8398,622.5,648.8398,626.5,638.8398,622.5,642.8398" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1283.5" x2="1283.5" y1="572.8711" y2="648.8398"/><polygon fill="#A80036" points="1279.5,638.8398,1283.5,648.8398,1287.5,638.8398,1283.5,642.8398" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="705" x2="705" y1="420.7075" y2="452.418"/><polygon fill="#A80036" points="701,442.418,705,452.418,709,442.418,705,446.418" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="705" x2="705" y1="654.8398" y2="666.8398"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="705" x2="1378" y1="666.8398" y2="666.8398"/><polygon fill="#A80036" points="1374,547.4844,1378,537.4844,1382,547.4844,1378,543.4844" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1378" x2="1378" y1="408.7075" y2="666.8398"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1378" x2="871" y1="408.7075" y2="408.7075"/><polygon fill="#A80036" points="881,404.7075,871,408.7075,881,412.7075,877,408.7075" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="539" x2="32" y1="408.7075" y2="408.7075"/><polygon fill="#A80036" points="28,533.4844,32,543.4844,36,533.4844,32,537.4844" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="32" x2="32" y1="408.7075" y2="678.8398"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="32" x2="705" y1="678.8398" y2="678.8398"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="705" x2="705" y1="678.8398" y2="715.2422"/><polygon fill="#A80036" points="701,705.2422,705,715.2422,709,705.2422,705,709.2422" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="705" x2="705" y1="376.7075" y2="396.7075"/><polygon fill="#A80036" points="701,386.7075,705,396.7075,709,386.7075,705,390.7075" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="705" x2="705" y1="283.9297" y2="342.7388"/><polygon fill="#A80036" points="701,332.7388,705,342.7388,709,332.7388,705,336.7388" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="803.5" x2="1407" y1="271.9297" y2="271.9297"/><polygon fill="#A80036" points="1403,522.4844,1407,532.4844,1411,522.4844,1407,526.4844" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1407" x2="1407" y1="271.9297" y2="808.7617"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1407" x2="717" y1="808.7617" y2="808.7617"/><polygon fill="#A80036" points="727,804.7617,717,808.7617,727,812.7617,723,808.7617" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="705" x2="705" y1="749.2109" y2="796.7617"/><polygon fill="#A80036" points="701,786.7617,705,796.7617,709,786.7617,705,790.7617" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="705" x2="705" y1="239.9297" y2="259.9297"/><polygon fill="#A80036" points="701,249.9297,705,259.9297,709,249.9297,705,253.9297" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="306.5" x2="306.5" y1="861.7617" y2="881.7617"/><polygon fill="#A80036" points="302.5,871.7617,306.5,881.7617,310.5,871.7617,306.5,875.7617" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1121.5" x2="1121.5" y1="861.7617" y2="881.7617"/><polygon fill="#A80036" points="1117.5,871.7617,1121.5,881.7617,1125.5,871.7617,1121.5,875.7617" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="306.5" x2="306.5" y1="915.7305" y2="935.7305"/><polygon fill="#A80036" points="302.5,925.7305,306.5,935.7305,310.5,925.7305,306.5,929.7305" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1121.5" x2="1121.5" y1="915.7305" y2="935.7305"/><polygon fill="#A80036" points="1117.5,925.7305,1121.5,935.7305,1125.5,925.7305,1121.5,929.7305" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="705" x2="705" y1="820.7617" y2="855.7617"/><polygon fill="#A80036" points="701,845.7617,705,855.7617,709,845.7617,705,849.7617" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1647" x2="1647" y1="458.418" y2="478.418"/><polygon fill="#A80036" points="1643,468.418,1647,478.418,1651,468.418,1647,472.418" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1874" x2="1874" y1="458.418" y2="478.418"/><polygon fill="#A80036" points="1870,468.418,1874,478.418,1878,468.418,1874,472.418" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1647" x2="1647" y1="512.3867" y2="532.3867"/><polygon fill="#A80036" points="1643,522.3867,1647,532.3867,1651,522.3867,1647,526.3867" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1874" x2="1874" y1="512.3867" y2="532.3867"/><polygon fill="#A80036" points="1870,522.3867,1874,532.3867,1878,522.3867,1874,526.3867" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1777.5" x2="1777.5" y1="420.7075" y2="452.418"/><polygon fill="#A80036" points="1773.5,442.418,1777.5,452.418,1781.5,442.418,1777.5,446.418" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1777.5" x2="1777.5" y1="538.3867" y2="550.3867"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1777.5" x2="2016.5" y1="550.3867" y2="550.3867"/><polygon fill="#A80036" points="2012.5,487,2016.5,477,2020.5,487,2016.5,483" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2016.5" x2="2016.5" y1="408.7075" y2="550.3867"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2016.5" x2="1922.5" y1="408.7075" y2="408.7075"/><polygon fill="#A80036" points="1932.5,404.7075,1922.5,408.7075,1932.5,412.7075,1928.5,408.7075" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1632.5" x2="1538.5" y1="408.7075" y2="408.7075"/><polygon fill="#A80036" points="1534.5,473,1538.5,483,1542.5,473,1538.5,477" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1538.5" x2="1538.5" y1="408.7075" y2="562.3867"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1538.5" x2="1777.5" y1="562.3867" y2="562.3867"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1777.5" x2="1777.5" y1="562.3867" y2="592.8711"/><polygon fill="#A80036" points="1773.5,582.8711,1777.5,592.8711,1781.5,582.8711,1777.5,586.8711" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1777.5" x2="1777.5" y1="376.7075" y2="396.7075"/><polygon fill="#A80036" points="1773.5,386.7075,1777.5,396.7075,1781.5,386.7075,1777.5,390.7075" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1777.5" x2="1777.5" y1="283.9297" y2="342.7388"/><polygon fill="#A80036" points="1773.5,332.7388,1777.5,342.7388,1781.5,332.7388,1777.5,336.7388" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1875.5" x2="2042.5" y1="271.9297" y2="271.9297"/><polygon fill="#A80036" points="2038.5,458.8516,2042.5,468.8516,2046.5,458.8516,2042.5,462.8516" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2042.5" x2="2042.5" y1="271.9297" y2="683.2422"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2042.5" x2="1789.5" y1="683.2422" y2="683.2422"/><polygon fill="#A80036" points="1799.5,679.2422,1789.5,683.2422,1799.5,687.2422,1795.5,683.2422" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1777.5" x2="1777.5" y1="626.8398" y2="671.2422"/><polygon fill="#A80036" points="1773.5,661.2422,1777.5,671.2422,1781.5,661.2422,1777.5,665.2422" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1777.5" x2="1777.5" y1="239.9297" y2="259.9297"/><polygon fill="#A80036" points="1773.5,249.9297,1777.5,259.9297,1781.5,249.9297,1777.5,253.9297" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1695" x2="1695" y1="948.9688" y2="968.9688"/><polygon fill="#A80036" points="1691,958.9688,1695,968.9688,1699,958.9688,1695,962.9688" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1877.5" x2="1877.5" y1="948.9688" y2="968.9688"/><polygon fill="#A80036" points="1873.5,958.9688,1877.5,968.9688,1881.5,958.9688,1877.5,962.9688" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1695" x2="1695" y1="1002.9375" y2="1022.9375"/><polygon fill="#A80036" points="1691,1012.9375,1695,1022.9375,1699,1012.9375,1695,1016.9375" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1877.5" x2="1877.5" y1="1002.9375" y2="1022.9375"/><polygon fill="#A80036" points="1873.5,1012.9375,1877.5,1022.9375,1881.5,1012.9375,1877.5,1016.9375" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1777.5" x2="1777.5" y1="906.1641" y2="942.9688"/><polygon fill="#A80036" points="1773.5,932.9688,1777.5,942.9688,1781.5,932.9688,1777.5,936.9688" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1777.5" x2="1777.5" y1="1028.9375" y2="1038.9375"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1777.5" x2="1972" y1="1038.9375" y2="1038.9375"/><polygon fill="#A80036" points="1968,977.5508,1972,967.5508,1976,977.5508,1972,973.5508" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1972" x2="1972" y1="894.1641" y2="1038.9375"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1972" x2="1943.5" y1="894.1641" y2="894.1641"/><polygon fill="#A80036" points="1953.5,890.1641,1943.5,894.1641,1953.5,898.1641,1949.5,894.1641" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1611.5" x2="1583" y1="894.1641" y2="894.1641"/><polygon fill="#A80036" points="1579,963.5508,1583,973.5508,1587,963.5508,1583,967.5508" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1583" x2="1583" y1="894.1641" y2="1050.9375"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1583" x2="1777.5" y1="1050.9375" y2="1050.9375"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1777.5" x2="1777.5" y1="1050.9375" y2="1070.9375"/><polygon fill="#A80036" points="1773.5,1060.9375,1777.5,1070.9375,1781.5,1060.9375,1777.5,1064.9375" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1777.5" x2="1777.5" y1="847.1641" y2="882.1641"/><polygon fill="#A80036" points="1773.5,872.1641,1777.5,882.1641,1781.5,872.1641,1777.5,876.1641" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1777.5" x2="1777.5" y1="752.4961" y2="813.1953"/><polygon fill="#A80036" points="1773.5,803.1953,1777.5,813.1953,1781.5,803.1953,1777.5,807.1953" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1876" x2="2001" y1="740.4961" y2="740.4961"/><polygon fill="#A80036" points="1997,949.4023,2001,959.4023,2005,949.4023,2001,953.4023" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2001" x2="2001" y1="740.4961" y2="1148.9063"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2001" x2="1789.5" y1="1148.9063" y2="1148.9063"/><polygon fill="#A80036" points="1799.5,1144.9063,1789.5,1148.9063,1799.5,1152.9063,1795.5,1148.9063" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1777.5" x2="1777.5" y1="1104.9063" y2="1136.9063"/><polygon fill="#A80036" points="1773.5,1126.9063,1777.5,1136.9063,1781.5,1126.9063,1777.5,1130.9063" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1777.5" x2="1777.5" y1="695.2422" y2="728.4961"/><polygon fill="#A80036" points="1773.5,718.4961,1777.5,728.4961,1781.5,718.4961,1777.5,722.4961" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1175.75" x2="705" y1="183.9609" y2="183.9609"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="705" x2="705" y1="183.9609" y2="205.9609"/><polygon fill="#A80036" points="701,195.9609,705,205.9609,709,195.9609,705,199.9609" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1306.75" x2="1777.5" y1="183.9609" y2="183.9609"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1777.5" x2="1777.5" y1="183.9609" y2="205.9609"/><polygon fill="#A80036" points="1773.5,195.9609,1777.5,205.9609,1781.5,195.9609,1777.5,199.9609" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="705" x2="705" y1="941.7305" y2="1178.9063"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="705" x2="1229.25" y1="1178.9063" y2="1178.9063"/><polygon fill="#A80036" points="1219.25,1174.9063,1229.25,1178.9063,1219.25,1182.9063,1223.25,1178.9063" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1777.5" x2="1777.5" y1="1160.9063" y2="1178.9063"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1777.5" x2="1253.25" y1="1178.9063" y2="1178.9063"/><polygon fill="#A80036" points="1263.25,1174.9063,1253.25,1178.9063,1263.25,1182.9063,1259.25,1178.9063" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1241.25" x2="1241.25" y1="151.9609" y2="171.9609"/><polygon fill="#A80036" points="1237.25,161.9609,1241.25,171.9609,1245.25,161.9609,1241.25,165.9609" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1129.25" x2="1129.25" y1="1216.9063" y2="1236.9063"/><polygon fill="#A80036" points="1125.25,1226.9063,1129.25,1236.9063,1133.25,1226.9063,1129.25,1230.9063" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1431.25" x2="1431.25" y1="1216.9063" y2="1236.9063"/><polygon fill="#A80036" points="1427.25,1226.9063,1431.25,1236.9063,1435.25,1226.9063,1431.25,1230.9063" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1129.25" x2="1129.25" y1="1270.875" y2="1290.875"/><polygon fill="#A80036" points="1125.25,1280.875,1129.25,1290.875,1133.25,1280.875,1129.25,1284.875" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1431.25" x2="1431.25" y1="1270.875" y2="1290.875"/><polygon fill="#A80036" points="1427.25,1280.875,1431.25,1290.875,1435.25,1280.875,1431.25,1284.875" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1241.25" x2="1241.25" y1="1190.9063" y2="1210.9063"/><polygon fill="#A80036" points="1237.25,1200.9063,1241.25,1210.9063,1245.25,1200.9063,1241.25,1204.9063" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1241.25" x2="1241.25" y1="1296.875" y2="1316.875"/><polygon fill="#A80036" points="1237.25,1306.875,1241.25,1316.875,1245.25,1306.875,1241.25,1310.875" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1241.25" x2="1241.25" y1="1350.8438" y2="1370.8438"/><polygon fill="#A80036" points="1237.25,1360.8438,1241.25,1370.8438,1245.25,1360.8438,1241.25,1364.8438" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1241.25" x2="1241.25" y1="1404.8125" y2="1424.8125"/><polygon fill="#A80036" points="1237.25,1414.8125,1241.25,1424.8125,1245.25,1414.8125,1241.25,1418.8125" style="stroke: #A80036; stroke-width: 1.0;"/><!-- |
---|---|
2 |
@startuml |
3 |
|
4 |
title **µRtWare**\nurtSubscriberFetchMessage()\n |
5 |
|
6 |
|
7 |
|
8 |
start |
9 |
note |
10 |
event received |
11 |
endnote |
12 |
:lock topic; |
13 |
note |
14 |
The message list is part of the topic and must be locked. |
15 |
endnote |
16 |
if (Is HRT subscriber?) then (yes) |
17 |
:lock next message; |
18 |
if (Fetch next or latest message?) then (next) |
19 |
else (latest) |
20 |
partition "iterate to latest" { |
21 |
:lock next message; |
22 |
note |
23 |
locked two messaged ahead |
24 |
endnote |
25 |
while (Timestamp of next message is younger than current?) is (yes) |
26 |
fork |
27 |
fork |
28 |
:decremenet HRT counter of current message; |
29 |
fork again |
30 |
:update QoS delay timer (@subscriber); |
31 |
note |
32 |
no lock required since this timer is only accessed when the topic is locked |
33 |
endnote |
34 |
endfork |
35 |
:unlock current message; |
36 |
fork again |
37 |
:lock next message; |
38 |
endfork |
39 |
endwhile (no) |
40 |
:unlock next message; |
41 |
note |
42 |
one message ahead still locked |
43 |
but HRT counter not yet decremented |
44 |
endnote |
45 |
} |
46 |
endif |
47 |
fork |
48 |
:decrement HRT counter of current message; |
49 |
fork again |
50 |
:update QoS delay timer (@subscriber); |
51 |
note |
52 |
no lock required since this timer is only accessed when the topic is locked |
53 |
endnote |
54 |
endfork |
55 |
else (no) |
56 |
:lock last read message; |
57 |
if (Timestamp equals local copy?) then (yes) |
58 |
else (no) |
59 |
partition "find oldest valid message" { |
60 |
:lock next message; |
61 |
while (Timestamp of next is younger then of current?) is (yes) |
62 |
fork |
63 |
:unlock current mesage; |
64 |
fork again |
65 |
:lock one message further ahaead; |
66 |
endfork |
67 |
endwhile (no) |
68 |
:unlock next message; |
69 |
} |
70 |
endif |
71 |
if (Fetch next or latest message?) then (next) |
72 |
else (latest) |
73 |
partition "iterate to latest" { |
74 |
:lock next message; |
75 |
while (Timestamp of next message is younger then current?) is (yes) |
76 |
fork |
77 |
:unlock current message; |
78 |
fork again |
79 |
:lock next message; |
80 |
endfork |
81 |
endwhile (no) |
82 |
:unlock next message; |
83 |
note |
84 |
one message ahead still locked |
85 |
endnote |
86 |
} |
87 |
endif |
88 |
endif |
89 |
fork |
90 |
:set last fetched message pointer to locked message; |
91 |
fork again |
92 |
:copy timestamp of message; |
93 |
endfork |
94 |
:unlock message; |
95 |
:unlock topic; |
96 |
stop |
97 |
|
98 |
@enduml |
99 |
|
100 |
PlantUML version 1.2018.11(Sat Sep 22 18:43:53 CEST 2018) |
101 |
(GPL source distribution) |
102 |
Java Runtime: OpenJDK Runtime Environment |
103 |
JVM: OpenJDK 64-Bit Server VM |
104 |
Java Version: 1.8.0_181-8u181-b13-0ubuntu0.16.04.1-b13 |
105 |
Operating System: Linux |
106 |
OS Version: 4.15.0-36-generic |
107 |
Default Encoding: UTF-8 |
108 |
Language: en |
109 |
Country: US |
110 |
--></g></svg> |