Files
website/assets/js/c5e91741.08a518f1.js
2021-07-21 13:59:29 -05:00

1 line
9.1 KiB
JavaScript

(self.webpackChunkstardust_website=self.webpackChunkstardust_website||[]).push([[523],{3905:function(e,t,n){"use strict";n.d(t,{Zo:function(){return s},kt:function(){return m}});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var d=r.createContext({}),p=function(e){var t=r.useContext(d),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=p(e.components);return r.createElement(d.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,d=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),u=p(n),m=a,f=u["".concat(d,".").concat(m)]||u[m]||c[m]||o;return n?r.createElement(f,i(i({ref:t},s),{},{components:n})):r.createElement(f,i({ref:t},s))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var l={};for(var d in t)hasOwnProperty.call(t,d)&&(l[d]=t[d]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var p=2;p<o;p++)i[p]=n[p];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},5691:function(e,t,n){"use strict";n.r(t),n.d(t,{frontMatter:function(){return l},contentTitle:function(){return d},metadata:function(){return p},toc:function(){return s},default:function(){return u}});var r=n(2122),a=n(9756),o=(n(7294),n(3905)),i=["components"],l={sidebar_position:1},d="Protocol",p={unversionedId:"stardust-protocol/protocol",id:"stardust-protocol/protocol",isDocsHomePage:!1,title:"Protocol",description:"Data",source:"@site/docs/stardust-protocol/protocol.md",sourceDirName:"stardust-protocol",slug:"/stardust-protocol/protocol",permalink:"/docs/stardust-protocol/protocol",editUrl:"https://github.com/StardustXR/website/edit/main/docs/stardust-protocol/protocol.md",version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Intro",permalink:"/docs/intro"},next:{title:"Initial Client Connection",permalink:"/docs/stardust-protocol/client/initial-connection"}},s=[{value:"Data",id:"data",children:[]},{value:"Message Types",id:"message-types",children:[{value:"Error",id:"error",children:[]},{value:"Signal",id:"signal",children:[]},{value:"Method Call",id:"method-call",children:[]},{value:"Method Return",id:"method-return",children:[]}]},{value:"Data Types",id:"data-types",children:[{value:"Color",id:"color",children:[]},{value:"Vector2",id:"vector2",children:[]},{value:"Vector3",id:"vector3",children:[]},{value:"Quaternion",id:"quaternion",children:[]}]}],c={toc:s};function u(e){var t=e.components,n=(0,a.Z)(e,i);return(0,o.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"protocol"},"Protocol"),(0,o.kt)("h2",{id:"data"},"Data"),(0,o.kt)("p",null,"Every message uses flatbuffers and most use flexbuffers to add variant data such as method arguments and return values. The flatbuffers Message type is:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cpp"},"namespace StardustXR;\n\ntable Message {\n type: ubyte;\n id: uint;\n object: string;\n method: string;\n error: string;\n data:[ubyte] (flexbuffer);\n}\n\nroot_type Message;\n")),(0,o.kt)("h2",{id:"message-types"},"Message Types"),(0,o.kt)("p",null,"All fields not accounted for are assumed to be not included or ",(0,o.kt)("inlineCode",{parentName:"p"},"0")," or ",(0,o.kt)("inlineCode",{parentName:"p"},'""')),(0,o.kt)("h3",{id:"error"},"Error"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"right"},"Field Name"),(0,o.kt)("th",{parentName:"tr",align:"left"},"Value"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"right"},(0,o.kt)("inlineCode",{parentName:"td"},"type")),(0,o.kt)("td",{parentName:"tr",align:"left"},(0,o.kt)("inlineCode",{parentName:"td"},"0"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"right"},(0,o.kt)("inlineCode",{parentName:"td"},"id")),(0,o.kt)("td",{parentName:"tr",align:"left"},(0,o.kt)("inlineCode",{parentName:"td"},"0")," or ID of method call")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"right"},(0,o.kt)("inlineCode",{parentName:"td"},"object")),(0,o.kt)("td",{parentName:"tr",align:"left"},"Path to the object the error comes from")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"right"},(0,o.kt)("inlineCode",{parentName:"td"},"method")),(0,o.kt)("td",{parentName:"tr",align:"left"},"What method caused the error (if applicable, otherwise this is an empty string)")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"right"},(0,o.kt)("inlineCode",{parentName:"td"},"error")),(0,o.kt)("td",{parentName:"tr",align:"left"},"String containing the error message itself")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"right"},(0,o.kt)("inlineCode",{parentName:"td"},"data")),(0,o.kt)("td",{parentName:"tr",align:"left"},"Empty vector")))),(0,o.kt)("h3",{id:"signal"},"Signal"),(0,o.kt)("p",null,"Signals are method calls that do not expect a response of any kind.\n| Field Name | Value |\n|-:|:-|\n| ",(0,o.kt)("inlineCode",{parentName:"p"},"type")," | ",(0,o.kt)("inlineCode",{parentName:"p"},"1")," |\n| ",(0,o.kt)("inlineCode",{parentName:"p"},"object")," | Path to object to send signal to |\n| ",(0,o.kt)("inlineCode",{parentName:"p"},"method")," | Name of the method to execute |\n| ",(0,o.kt)("inlineCode",{parentName:"p"},"data")," | Flexbuffer containing arguments to pass to remote method |"),(0,o.kt)("h3",{id:"method-call"},"Method Call"),(0,o.kt)("p",null,"Method calls allow for remote procedure calling and should block the thread they are sent from until a response is heard.\n| Field Name | Value |\n|-:|:-|\n| ",(0,o.kt)("inlineCode",{parentName:"p"},"type")," | ",(0,o.kt)("inlineCode",{parentName:"p"},"2")," |\n| ",(0,o.kt)("inlineCode",{parentName:"p"},"id")," | Dynamically generated ID to identify method return for this method |\n| ",(0,o.kt)("inlineCode",{parentName:"p"},"object")," | Path to object to execute method on |\n| ",(0,o.kt)("inlineCode",{parentName:"p"},"method")," | Name of the method to execute |\n| ",(0,o.kt)("inlineCode",{parentName:"p"},"data")," | Flexbuffer containing arguments to pass to remote method |"),(0,o.kt)("h3",{id:"method-return"},"Method Return"),(0,o.kt)("p",null,"Message to pass the return value back to the program.\n| Field Name | Value |\n|-:|:-|\n| ",(0,o.kt)("inlineCode",{parentName:"p"},"type")," | ",(0,o.kt)("inlineCode",{parentName:"p"},"3")," |\n| ",(0,o.kt)("inlineCode",{parentName:"p"},"id")," | The same as the message call's ID |\n| ",(0,o.kt)("inlineCode",{parentName:"p"},"data")," | Flexbuffer containing return value |"),(0,o.kt)("h2",{id:"data-types"},"Data Types"),(0,o.kt)("p",null,"Stardust does not support the ",(0,o.kt)("inlineCode",{parentName:"p"},"Map")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"FixedTypedVector")," flexbuffers datatypes."),(0,o.kt)("h3",{id:"color"},"Color"),(0,o.kt)("p",null,"A ",(0,o.kt)("inlineCode",{parentName:"p"},"Vector")," of 4 ",(0,o.kt)("inlineCode",{parentName:"p"},"float")," is treated as a ",(0,o.kt)("inlineCode",{parentName:"p"},"Color")," in the form ",(0,o.kt)("inlineCode",{parentName:"p"},"RGBA"),"."),(0,o.kt)("h3",{id:"vector2"},"Vector2"),(0,o.kt)("p",null,"A ",(0,o.kt)("inlineCode",{parentName:"p"},"Vector")," of 2 ",(0,o.kt)("inlineCode",{parentName:"p"},"double")," is treated as a ",(0,o.kt)("inlineCode",{parentName:"p"},"Vector2"),"."),(0,o.kt)("h3",{id:"vector3"},"Vector3"),(0,o.kt)("p",null,"A ",(0,o.kt)("inlineCode",{parentName:"p"},"Vector")," of 3 ",(0,o.kt)("inlineCode",{parentName:"p"},"double")," is treated as a ",(0,o.kt)("inlineCode",{parentName:"p"},"Vector3"),"."),(0,o.kt)("h3",{id:"quaternion"},"Quaternion"),(0,o.kt)("p",null,"A ",(0,o.kt)("inlineCode",{parentName:"p"},"Vector")," of 4 ",(0,o.kt)("inlineCode",{parentName:"p"},"double")," is treated as a ",(0,o.kt)("inlineCode",{parentName:"p"},"Quaternion"),"."))}u.isMDXComponent=!0}}]);