Skip to content

Build COGS plugins or Media Master content with our Javascript/Typescript library

License

Notifications You must be signed in to change notification settings

Sam-Lee-17/cogs-client-lib

 
 

Repository files navigation

COGS Client library

Create content for your COGS Media Master

Add to your project

Static HTML

Download cogs-client.js from https://unpkg.com/@clockworkdog/cogs-client and save it to your project.

Include the script in your HTML page:

<script src="./cogs-client.js"></script>

(Avoid <script> tags with http... so your content works without an internet connection.)

NPM / Yarn

Then add cogs-client with NPM or Yarn:

npm install --save @clockworkdog/cogs-client
# OR
yarn add @clockworkdog/cogs-client

Usage

Create a cogs-plugin-manifest.js file

See PluginManifestJson for details of what to include.

If using Typescript set "allowJs": true in your tsconfig.json.

Use the @type {const} JSDoc annotation to allow the manifest to be imported as a literal type and @satisfies {import("@clockworkdog/cogs-client").CogsPluginManifest} to allow your editor to check the validity of the manifest.

e.g.

module.exports =
  /**
   * @type {const}
   * @satisfies {import("@clockworkdog/cogs-client").CogsPluginManifest}
   */
  ({
    name: 'Big Button',
    icon: 'bullseye-pointer',
    description: 'A big, colorful touchscreen button',
    version: '1',
    config: [
      {
        name: 'Color',
        value: { type: 'string', default: 'red' },
      },
    ],
    state: [
      {
        name: 'Enabled',
        value: { type: 'boolean', default: false },
        writableFromCogs: true,
      },
    ],
    events: {
      toCogs: [
        {
          name: 'Pressed',
          value: { type: 'boolean' },
        },
      ],
      fromCogs: [
        {
          name: 'Explosion',
        },
      ],
    },
    media: {
      audio: true,
      video: true,
      images: true,
    },
  });

Import the library

Browser

const { CogsConnection, CogsAudioPlayer } = COGS;

Javascript

const { CogsConnection, CogsAudioPlayer } = require('@clockworkdog/cogs-client');

Typescript / ES6

import { CogsConnection, CogsAudioPlayer } from '@clockworkdog/cogs-client';

Connect to COGS

Initialize a CogsConnection with the manifest you created above.

let connected = false;

import manifest from './cogs-plugin-manifest.js'; // Requires `"allowJs": true` in `tsconfig.json`

const cogsConnection = new CogsConnection(manifest);
cogsConnection.addEventListener('open', () => {
  connected = true;
});
cogsConnection.addEventListener('close', () => {
  connected = false;
});
cogsConnection.addEventListener('config', ({ config }) => {
  // Handle new config
  // `config` is of type `{ [name: string]: number | string | boolean }`
});
cogsConnection.addEventListener('state', ({ state }) => {
  // Handle state updates
  // `state` is of type `{ [name: string]: number | string | boolean }`
});
cogsConnection.addEventListener('event', ({ name, value }) => {
  // Handle events from COGS
  // `name` is the event name.
  // `value` is of the type defined in manifest, one of `number | string | boolean | undefined`.
});
cogsConnection.addEventListener('message', ({ message }) => {
  // Handle low-level COGS messages. See `types/CogsClientMessage.ts`
});

function sendEventToCogs() {
  cogsConnection.sendEvent('Hello');
}

function sendPortUpdateToCogs() {
  cogsConnection.setState({ port1: 100 });
}

Support audio actions

Add audio to cogs-plugin-manifest.js:

{
  media: {
    audio: true;
  }
}

Add CogsAudioPlayer to your page:

const audioPlayer = new CogsAudioPlayer(cogsConnection);

// Optional
audioPlayer.addEventListener('state', (audioState) => {
  // Handle audio state changes. See `types/AudioState.ts`
});

Local development

When developing locally you should connect to COGS in "simulator" mode by appending ?simulator=true&t=media_master&name=MEDIA_MASTER_NAME to the URL. Replace MEDIA_MASTER_NAME with the name of the Media Master you set in COGS.

For example, with your custom content hosted on port 3000, http://localhost:3000?simulator=true&t=media_master&name=Timer+screen will connect as the simulator for Timer screen.

About

Build COGS plugins or Media Master content with our Javascript/Typescript library

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • TypeScript 100.0%