POISN
Network-Shared I/O Protocol:
Allowing for custom frontend UI and cross-application data streaming.
Network-Shared I/O Protocol API definition
Poisn is an Application Layer Protocol for multi-end communication:
The structure that this protocol supports consists of a central server and an arbitrary number of connected nodes.
N N N Peer Nodes
\|/
S Server
|
N Client Node
The server arbitrates the distribution of messages to all active nodes, and keeps track of connections via username/host pairs associated with every open TCP socket. Queries and commands sent to the server illicit a response from the server to the node that issued the query/command, and relay-type messages are passed on to all active nodes recognized by the server.
N ------ S ------ {N N N ...}
:::::::::: query/command
.........:::::::::::::::::::: relayed message
Communication Patterns:
Nodes communicate with the central server, and the server relays the data to all other connected nodes over a persistent TCP connection. The data can be treated as would a standard input/output buffer, or integrated with a frontend UI that implements the POISN chat API.
The standard communication pattern consists of a data field and optional header field that contain context-specific information.
HEAD: header identifies the format of the message and passed parameters.
DATA: data field contains all text to be transfered to the server or to node.
Standard Server-Client Variations
General Prompt/Response
All non-formatted messages are contained as plaintext without a header.<Plaintext>- User Identification
- User Authenication
- Host Selection Response
Node Query Response
Client queries server for list of active nodes with 'Q NODE', server responds with 'A NODE'.HEAD: Q NODE HEAD: A NODE <List of active nodes>History Query Response
Client queries server for list of messages since index with'Q HIST', server responds with 'A HIST'.HEAD: Q HIST <index> HEAD: A HIST <List of messages since queried history index>
Standard Relayed Variations
Plaintext Message
Client sends message to server, message is relayed to all active nodes. Receiving client displays text to user.HEAD: R TEXT <Plaintext message>Link Message
Client sends message to server, message is relayed to all active nodes. Receiving client may attempt to embed content.HEAD: R LINK <Plaintext link URL>File Encoding Message
Client sends message to server, message is relayed to all active nodes. Receiving client may attempt to decode and embed content.HEAD: R FILE <filetype> <Byte encoding of file>
Clients and Dependencies

Miasma Client
Client-side software built using POISN protocol and Tkinter graphics frontend. Themed using JSON config file.
- Tkinter
- Contextlib

DartFrog Client
Web-application built using POISN protocol. Uses server-side websocket-to-TCP compatibility layer to communicate with server.

Nightshade Client
Client-side software built using POISN protocol and IMGUI graphics frontend. Media interpretation and link embedding. (WIP)
Contributors
Matthew Tiemersma - mtiemersma19@georgefox.edu
Kevin Lockwood - klockwood19@georgefox.edu
Dylan Rainey - drainey19@georgefox.edu
Luke Gantar - lgantar19@georgefox.edu
Licensing
Copyright (c) 2022, the POISN developers.
SPDX-License-Identifier: BSD-2-Clause
Log in or sign up for Devpost to join the conversation.