Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/zebrajaeger/ws-value

TS lib for value distribution vie websocket
https://github.com/zebrajaeger/ws-value

Last synced: 9 days ago
JSON representation

TS lib for value distribution vie websocket

Awesome Lists containing this project

README

        

# ws-value

Distribute values via websocket

## Example in TS

### MyInterface

#### Common stuff for Client and server

```typescript
// complex object (may have sub-objects but we keep it simple)
export interface Status {
foo: number;
bar: string;
}
```

### Basic Server

```typescript
import {Status} from 'MyInterface';
import {Server} from 'rpc-websockets';
import {ServerValue} from '@zebrajaeger/ws-value';

// bind server to all interfaces and port 8081
const server = new Server({port: 8081, host: '0.0.0.0'});

// register server value of type 'Status' with name 'status' and set initial value
const status = new ServerValue(server, 'status');
status.setValue({foo: 666, bar: 'hello'});

// register server value of type 'number' with name 'counter and let it uninitialized
const counter = new ServerValue(server, 'counter');
```

### Basic Client

```typescript
import {Status} from 'MyInterface';
import {Client} from 'rpc-websockets';
import {ClientValue} from '@zebrajaeger/ws-value';

// simple value
let counter: ClientValue;

// complex value
let status: ClientValue;

// create websocket client
const client = new Client('ws://192.168.178.68:8081');

// until client is ready we can register out values
this.client.on('open', () => {

// register value with name 'counter' and type 'number'
this.counter = new ClientValue(this.client, 'counter');

// register value with name 'status' and type 'Status'
this.status = new ClientValue(this.client, 'status');
});
```

### Change values (interface is equal on client and server side)

#### Change value

```typescript
function incCounter() {
const v = counter.getValue() || 0;
counter.setValue(v + 1);
}

function setStatus(s: Status) {
status.setValue(s);
}
```

#### Get notificated on value change

```typescript
// call as soon as status has a valid value. Is called only once
status.onInit(newStatus=>{
console.log('init', newStatus);
});

// call everytime when status has been changed
status.onChange(newStatus=>{
console.log('change', newStatus);
});
```

#### Change equality behavior using deep-equal instead of equal (===) operator

```typescript
import deepEqual = require('deep-equal');

// using custom function within lambda
const status = new ServerValue(server, 'counter', (o1, o2) => deepEqual(o1, o2));

// or more simple: deepEqual function as parameter
const status = new ServerValue(server, 'counter', deepEqual);
```

## Overview
![Overview](./doc/overview.png)

## Release nodes

## v1.1.3

- Start with release notes in readme
- remove unneeded files from deployed package to keep it small
- reduce image size