Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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
- Host: GitHub
- URL: https://github.com/zebrajaeger/ws-value
- Owner: zebrajaeger
- License: gpl-3.0
- Created: 2020-05-24T18:57:34.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2023-01-06T07:09:17.000Z (almost 2 years ago)
- Last Synced: 2024-10-11T17:15:30.550Z (25 days ago)
- Language: TypeScript
- Size: 1.26 MB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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