Python Server Library for NOODLES Protocol
Project description
Rigatoni
Python Server Library for NOODLES Protocol
Description
This server library implements the NOODLES messaging protocol and provides objects for maintaining a scene in state. The server uses a websocket connection to send CBOR encoded messages. To customize its implementation, the library provides convenient interface methods to assist the user in writing their own methods for the server. The user can also add custom delegates to add additionaly functionality to any of the standard components.
How does the server work?
The server handles incoming websocket connections and maintains a list of clients that are currently connected. After a client has sent an introductory message, they are free to invoke methods disclosed by the server. The server parses each message and attempts to invoke a corresponding message which has been injected by the user. The server calls this method and sends a reply with either a response or an exception.
sequenceDiagram
participant User
participant Method
participant Server
participant Client
User->>Method: Defines Methods and Components
User->>Server: Starts Server with Starting State
Client->>Server: Sends Intro Message
Server->>Client: Updates the Client with Current State
loop until end of session
Client->>Server: Request to Invoke Method
Server->>Method: Invokes Method
Method->>Server: Invokes Signals, Creates, Updates, and Deletes Components
Server->>Client: Broadcasts Component Changes to All Clients
Server->>Client: Sends Method Reply with Response or Exception
end
Getting Started
1. Install the server library
pip install rigatoni
2. Define components to be held in the server's starting state
- Use starting component objects to help with the creation of these components
rigatoni.StartingComponent(Type[Component], dict[Component_Attr, Value])
- You can refer to the objects listed in
noodle_objects.py
to find all the available components along with their mandatory, default, and optional attributes. Additional information on NOODLE components and their attributes can be found here - Note that components must be initialized with keyword arguments to allow for validation
- When creating methods, an additional callable object should be attached. This method will be injected onto the server object, and it will be associated with its corresponding method component.
rigatoni.StartingComponent(Type[Component], dict[Component_Attr, Value], Callable)
3. Start running the server
server = Server(50000, starting_state, delegates)
server.run()
server.shutdown()
or alternatively, you can use the context manager to automatically start running the server in a new thread
with Server(50000, starting_state, delegates) as server:
# do stuff
More Info on Creating Methods
The majority of the user's time building a server application will be spent defining methods. To help the user with this process, this library provides several interface methods to reduce friction when interacting with state and the server object. Also it is important to note that each method is injected and called so that the first two arguments are a reference to the server object and the method invoke's context as a dict.
Interface Methods
server.create_component(comp_type: Type[Component], **kwargs)
server.delete_component(obj: Union[Component, Delegate, ID])
server.update_component(obj: Component, delta: Set[str)
server.invoke_signal(signal: ID, on_component: Component, signal_data: list[Any])
server.get_ids_by_type(component: Type[Component])
server.get_component_id(type: Type[Component], name: str)
server.get_component(id: ID)
Geometry Library
Creating a renderable entity is an involved process that makes use of several different components. To help simplify this process the library provides methods to create all the linked components necessary for a mesh.
rigatoni.geometry.GeometryPatchInput(
vertices: list
indices: list
index_type: str
material: MaterialID
normals: Optional[list]
tangents: Optional[list]
textures:Optional[list]
colors: Optional[list]
)
rigatoni.geometry.build_geometry_patch(server: Server, name: str, input: GeometryPatchInput)
instances = rigatoni.geometry.create_instances(
positions: Optional[list[nooobs.Vec3]],
colors: Optional[list[nooobs.Vec4]],
rotations: Optional[list[nooobs.Vec4]],
scales: Optional[list[nooobs.Vec3]]
)
rigatoni.geometry.build_entity(server: Server, geometry: Geometry, instances: Optional[Mat4])
rigatoni.geometry.update_entity(server: Server, entity: Entity, geometry: Optional[Geometry], instances: Optional[Mat4])
rigatoni.geometry.add_instances(server: Server, entity: Entity, instances: Mat4)
Hungry for more NOODLES?
For more information and other related repositories check out this repository
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file rigatoni-0.1.16.tar.gz
.
File metadata
- Download URL: rigatoni-0.1.16.tar.gz
- Upload date:
- Size: 3.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.28.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 932ca8df616e8015101f319b1a67cc9b8d4b9d3d7f59ee273b0ac740fc84c6ff |
|
MD5 | dc8d556c9bf2ab1024abd02861509ad1 |
|
BLAKE2b-256 | 4e32cc4c97276630861d8025f2b4a1ca10f32adc0142d90ccf3e1c73feb7bb87 |
Provenance
File details
Details for the file rigatoni-0.1.16-py3-none-any.whl
.
File metadata
- Download URL: rigatoni-0.1.16-py3-none-any.whl
- Upload date:
- Size: 25.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.28.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 89d2b79a25fc6129e0ca0195fd76d164511876f2f4c3c3e8700cfd8cdb7fa2df |
|
MD5 | 721d23af877a9c7e6fe760ed29a7d959 |
|
BLAKE2b-256 | 985c2f33234e12e46295affe558fb8cc3b3819b3e37828603dc6ae01c7c1ac7e |