{"id":190,"date":"2011-08-01T12:52:00","date_gmt":"2011-08-01T11:52:00","guid":{"rendered":"http:\/\/www.celesteh.com\/blog\/2011\/08\/01\/dissertation-bile-networking-white\/"},"modified":"2015-06-19T00:23:22","modified_gmt":"2015-06-18T23:23:22","slug":"dissertation-bile-networking-white","status":"publish","type":"post","link":"https:\/\/www.celesteh.com\/blog\/2011\/08\/01\/dissertation-bile-networking-white\/","title":{"rendered":"Dissertation: BiLE Networking White Paper"},"content":{"rendered":"<p>This document describes the networking<br \/>\ninfrastructure in use by BiLE.<br \/>\n<BR><\/p>\n<p>The goal of the infrastructure design<br \/>\nhas been flexibility for real time changes in sharing network data<br \/>\nand calling remote methods for users of languages like supercollider.<br \/>\n While this flexibility is somewhat lost to users of inflexible<br \/>\nlanguages like MAX, they, nevertheless, can benefit from having a<br \/>\nstructure for data sharing.<br \/>\n<BR><\/p>\n<p><BR><\/p>\n<p><B>Network<br \/>\nModels<\/B><br \/>\n<BR><\/p>\n<p>  If there is a good reason, for<br \/>\nexample, a remote user, we support OSCGroups as a means of sharing<br \/>\ndata.<\/p>\n<p>  If all users are located together on<br \/>\nthe same subnet, then we use broadcast on port 57120.<br \/>\n<BR><\/p>\n<p><B>OSC<br \/>\nPrefix<\/B><br \/>\n<BR><\/p>\n<p>  By convention, all OSC messages start<br \/>\nwith &#8216;\/bile\/&#8217;<\/p>\n<p><B>Data<br \/>\nRestrictions<\/B><br \/>\n<BR><\/p>\n<p>  Strings must all be ASCII. Non ASCII<br \/>\ncharacters will be ignored.<br \/>\n<BR><\/p>\n<p><B>Establishing<br \/>\nCommunication<\/B><br \/>\n<I><B>Identity<\/B><\/I><br \/>\n<B>ID<\/B><br \/>\n      Upon joining the network, users<br \/>\nshould announce their identity:<\/p>\n<p>      \/bile\/API\/ID<br \/>\nnickname ipaddress port<\/p>\n<p>      nicknames must be ASCII only.<\/p>\n<p><I><B>Example:<\/B><\/I><\/p>\n<p>      \/bile\/API\/ID<br \/>\nNick 192.168.1.66 57120<\/p>\n<p>      Note that because broadcast<br \/>\nechoes back, users may see their own ID arrive as an announcement.<\/p>\n<p><B>IDQuery<\/B><\/p>\n<p>      Users should also send out their<br \/>\nID in response to an IDQuery:<\/p>\n<p>      \/bile\/API\/IDQery<\/p>\n<p>      Users can send this message at<br \/>\nany time, in order to compile a list of everyone on the network.<\/p>\n<p><I><B>API<\/B><\/I><br \/>\n<B>Query<\/B><br \/>\n        Users can enquire what methods<br \/>\nthey can remotely invoke and what data they can request.<\/p>\n<p>        \/bile\/API\/Query<\/p>\n<p>        In<br \/>\nreply to this, users should send \/bile\/API\/Key and \/bile\/API\/Shared<br \/>\n(see below)<\/p>\n<p><B>Key<\/B><br \/>\n        Keys represent remote methods.<br \/>\nThe user should report their accessible methods in response to a<br \/>\nQuery<\/p>\n<p>        \/bile\/API\/Key<br \/>\nsymbol desc nickname<\/p>\n<p>        The symbol is an OSC message<br \/>\nthat the user is listening for.<br \/>\n        The desc is a text based<br \/>\ndescription of what this message does. It should include a usage<br \/>\nexample.<br \/>\n        The nickname is the name of the<br \/>\nuser that accepts this message.<\/p>\n<p><I><B>Example<\/B><\/I><\/p>\n<p>        \/bile\/API\/Key<br \/>\n\/bile\/msg &quot;For chatting. Usage: msg, nick, text&quot; Nick<br \/>\n  <B>Shared<\/B><br \/>\n        Shared represents available<br \/>\ndata streams.  Sources may include input devices, control data sent<br \/>\nto running audio processes or analysis.  The user should report their<br \/>\nshared data response to a Query<br \/>\n        \/bile\/API\/Shared<br \/>\n symbol desc<br \/>\n        The symbol is an OSC message<br \/>\nthat the user sends with.  The format of this should be<\/p>\n<p>        \/bile\/nickname\/symbol<br \/>\n        The desc is a text based<br \/>\ndescription of the data. If the range is not between 0-1, it should<br \/>\nmention this.<br \/>\n        The nickname is the name of the<br \/>\nuser that accepts this message.<\/p>\n<p><I><B>Example<\/B><\/I><br \/>\n        \/bile\/API\/Shared<br \/>\n\/bile\/Nick\/freq &quot;Frequency. Not scaled.&quot;<\/p>\n<p><B>Listening<\/B><br \/>\n<B>RegisterListener<\/B><br \/>\n          Shared data will not be sent out if no one has requested<br \/>\nit and it may be sent either directly to interested users or to the<br \/>\nentire group, at the sender&#8217;s discretion.  In order to ensure<br \/>\nreceiving the data stream, a user must register as a listener.<br \/>\n        \/bile\/API\/registerListener<br \/>\nsymbol nickname ip port<br \/>\n        The symbol is an OSC message<br \/>\nthat the user will listening for.  It should correspond with a<br \/>\npreviously advertised shared item.  If the receiver of this message<br \/>\nrecognises their own nickname in in the symbol (which is formatted<br \/>\n\/bile\/nickname\/symbol),<br \/>\nthey should return an error:<br \/>\n\/bileAPI\/Error\/noSuchSymbol<\/p>\n<p>        The nickname is the name of the<br \/>\nuser that will accept the symbol as a message.<br \/>\n        The ip is the ip address of the<br \/>\nuser that will accept the symbol as a message.<br \/>\n        The port is the port of the<br \/>\nuser that will accept the symbol as a message.<br \/>\n<I><B>Example<\/B><\/I><br \/>\n        \/bile\/API\/registerListener<br \/>\n\/bile\/Nick\/freq Shelly  192.168.1.67 57120<br \/>\n<BR><\/p>\n<p><I><B>Error<\/B><\/I><\/p>\n<p><B>noSuchSymbol<\/B><br \/>\n          In the case that a user receives a request to register a<br \/>\nlistener or to remove a listener for data that they are not sharing,<br \/>\nthey can reply with <\/p>\n<p>        \/bile\/API\/Error\/noSuchSymbol<br \/>\nOSCsymbol<br \/>\n        The symbol is an OSC message<br \/>\nthat the user tried to start or stop listening to.  It is formatted<br \/>\n\/bile\/nickname\/symbol.<br \/>\n Users should not reply with an error unless they recognise their own<br \/>\nnickname as the middle element of the OSC message.  This message may<br \/>\nbe sent directly to the confused user.<br \/>\n<BR><\/p>\n<p><I><B>Example<\/B><\/I><\/p>\n<p>        \/bile\/API\/Error\/noSuchSymbol<br \/>\n\/bile\/Nick\/freq<br \/>\n<I><B>De-listening<\/B><\/I><br \/>\n<B>RemoveListener<\/B><br \/>\n            To announce an intention to ignore subsequent data, a<br \/>\nuser can ask to be removed.<br \/>\n        \/bile\/API\/removeListener<br \/>\nsymbol nickname ip<br \/>\n        The symbol is an OSC message<br \/>\nthat the user will no longer be listening for.  If the receiver of<br \/>\nthis message sees their nickname in the symbol which is formatted<\/p>\n<p>\/bile\/nickname\/symbol),<br \/>\nthey can reply with \/bile\/API\/Error\/noSuchSymbol<br \/>\nsymbol<br \/>\n        The nickname is the name of the<br \/>\nuser that will no longer accept the symbol as a message.<br \/>\n        The ip is the ip address of the<br \/>\nuser that will no longer accept the symbol as a message.<br \/>\n<I><B>Example<\/B><\/I><br \/>\n        \/bile\/API\/removeListener<br \/>\n \/bile\/Nick\/freq Shelly  192.168.1.67<br \/>\n<B>RemoveAll<\/B><\/p>\n<p>            Users who are quitting the network can asked to be<br \/>\nremoved from everything that they were listening to.<br \/>\n        \/bile\/API\/removeAll<br \/>\n nickname ip <\/p>\n<p>        The nickname is the name of the<br \/>\nuser that will no longer accept any shared data.<br \/>\n        The ip is the ip address of the<br \/>\nuser that will no longer accept any shared data.<br \/>\n<I><B>Example<\/B><\/I><br \/>\n        \/bile\/API\/removeAll<br \/>\n Nick  192.168.1.66<\/p>\n<p><B>Commonly<br \/>\nUsed Messages<\/B><br \/>\n<I><B>Chatting<\/B><\/I><br \/>\n<B>Msg<\/B><br \/>\n          This is used for chatting.<br \/>\n        \/bile\/msg<br \/>\nnickname text<br \/>\n        The nickname is the name of the<br \/>\nuser who is sending the message.<br \/>\n        The text is the text that the<br \/>\nuser wishes to send to the group.<\/p>\n<p><I><B>Clock<\/B><\/I><br \/>\n          This is for a shared stopwatch and not for serious<br \/>\ntiming applications<br \/>\n<B>Clock start or<br \/>\nstop<\/B><br \/>\n          \/bile\/clock\/clock<br \/>\nsymbol<br \/>\n      The symbol is either start or<br \/>\nstop.<br \/>\n<B>Reset<\/B><\/p>\n<p>         Reset the clock to zero.<br \/>\n          \/bile\/clock\/reset<br \/>\n<B>Set<\/B><br \/>\n          Set the clock time<br \/>\n          \/bile\/clock\/set<br \/>\nminutes seconds<br \/>\n          Minutes is the number of minutes past zero.<\/p>\n<p>          Seconds is the number of seconds past zero.<br \/>\n<BR><BR><\/p>\n<p><B>Proposed<br \/>\nAdditions<\/B><br \/>\n Because users can silently join, leave<br \/>\nand re-join the network, it could be a good idea to have users time<br \/>\nout after a period of silence, maybe around 30 seconds or so.  To<br \/>\nstay active, they would need to send I&#8217;m-still-here messages.<\/p>\n<p> There should possibly also be a way<br \/>\nfor a user to announce that they have just arrived, so, for example,<br \/>\nif a SuperCollider user recompiles, her connection will think of<br \/>\nitself as new and other users will need to delete or recreate<br \/>\nconnections depending on that user.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This document describes the networking infrastructure in use by BiLE. The goal of the infrastructure design has been flexibility for real time changes in sharing network data and calling remote methods for users of languages like supercollider. While this flexibility is somewhat lost to users of inflexible languages like MAX, they, nevertheless, can benefit from &hellip; <a href=\"https:\/\/www.celesteh.com\/blog\/2011\/08\/01\/dissertation-bile-networking-white\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Dissertation: BiLE Networking White Paper<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[1],"tags":[112,76,122],"class_list":["post-190","post","type-post","status-publish","format-standard","hentry","category-uncategorised","tag-bile","tag-celesteh","tag-thesis"],"_links":{"self":[{"href":"https:\/\/www.celesteh.com\/blog\/wp-json\/wp\/v2\/posts\/190","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.celesteh.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.celesteh.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.celesteh.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.celesteh.com\/blog\/wp-json\/wp\/v2\/comments?post=190"}],"version-history":[{"count":1,"href":"https:\/\/www.celesteh.com\/blog\/wp-json\/wp\/v2\/posts\/190\/revisions"}],"predecessor-version":[{"id":2389,"href":"https:\/\/www.celesteh.com\/blog\/wp-json\/wp\/v2\/posts\/190\/revisions\/2389"}],"wp:attachment":[{"href":"https:\/\/www.celesteh.com\/blog\/wp-json\/wp\/v2\/media?parent=190"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.celesteh.com\/blog\/wp-json\/wp\/v2\/categories?post=190"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.celesteh.com\/blog\/wp-json\/wp\/v2\/tags?post=190"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}