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

Miasma Client

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

  • Tkinter
  • Contextlib


Dartfrog

DartFrog Client

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


Nightshade

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

Share this project:

Updates