This commit is contained in:
Rik Berkelder 2021-01-23 16:28:49 +01:00
parent 4c5d981e7f
commit 03325a1c63
8 changed files with 332 additions and 13 deletions

View file

@ -1,3 +1,3 @@
export * from './oscClient';
export {OSCType} from 'osc-min'
export {OSCType, OSCArgumentType} from 'osc-min'

View file

@ -3,13 +3,16 @@ import {OSCArgument, OSCType, toBuffer, fromBuffer, OSCArgumentType} from 'osc-m
import { EventEmitter } from 'events';
interface OSCClientOptions {
export interface OSCClientOptions {
/** host to output OSC data to */
outHost: string;
/** port to output OSC data to */
outPort: number;
/** Local port for incoming OSC messages */
inPort?: number;
}
interface ReceivedOSCMessage<T extends OSCType> {
export interface ReceivedOSCMessage<T extends OSCType> {
address: string;
type: T;
value: OSCArgumentType<T>
@ -17,9 +20,33 @@ interface ReceivedOSCMessage<T extends OSCType> {
// declare types for events
export declare interface OSCClient {
on(event: 'message', listener: (message: ReceivedOSCMessage<OSCType>) => void): this;
/**
Emitted whenever an OSC message is received on inPort
@event
*/
on(event: 'message', listener: (message: ReceivedOSCMessage<OSCType>) => void): this
/**
Emitted when OSC client is listening on inPort
@event
*/
on(event: 'listening', listener: ()=>void): this
}
/**
* OSC Client base class, handles sending and receiving OSC messages
```
const osc = new OSCClient({
outHost: "192.168.0.68",
outPort: 8000,
inPort: 8000
})
```
*/
export class OSCClient extends EventEmitter{
private socket: dgram.Socket;
private options: OSCClientOptions;
@ -32,6 +59,10 @@ export class OSCClient extends EventEmitter{
this.socket.bind(options.inPort);
}
this.socket.on('listening', ()=>{
this.emit('listening');
})
this.socket.on('message', (msg)=>{
const decoded = fromBuffer(msg)
if(decoded.oscType === "message"){
@ -50,6 +81,13 @@ export class OSCClient extends EventEmitter{
this.socket.send(packet, 0, packet.length, this.options.outPort, this.options.outHost)
}
/**
* Send an OSC message
```
osc.send("/osc/url", OSCType.String, "hello")
```
*/
public send<T extends OSCType>(address: string, type: T, value: OSCArgumentType<T>){
const arg: OSCArgument<T> = {
type,

View file

@ -37,7 +37,7 @@ declare module "osc-min" {
: T extends OSCType.True ? true
: T extends OSCType.False ? false
: T extends OSCType.Blob ? Buffer
: T extends OSCType.array ? Array<OSCArgument<OSCType>>
: T extends OSCType.Array ? Array<OSCArgument<OSCType>>
: null;
export interface OSCArgument<T extends OSCType>{