https://github.com/zebrajaeger/ws-value
TS lib for value distribution vie websocket
https://github.com/zebrajaeger/ws-value
Last synced: 4 months 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 (about 6 years ago)
- Default Branch: master
- Last Pushed: 2023-01-06T07:09:17.000Z (over 3 years ago)
- Last Synced: 2025-08-09T00:44:51.211Z (11 months ago)
- Language: TypeScript
- Size: 1.26 MB
- Stars: 0
- Watchers: 1
- 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

## Release nodes
## v1.1.3
- Start with release notes in readme
- remove unneeded files from deployed package to keep it small
- reduce image size