Compare commits

..

No commits in common. "11b1702726d1bbc35b9b5c25b6eb0cfa53403a49" and "5fda0ab2048855c800e63edeffa2980858486a3c" have entirely different histories.

10 changed files with 109 additions and 298 deletions

55
.eslintrc.json Normal file
View file

@ -0,0 +1,55 @@
{
"env": {
"es6": true
},
"extends": ["airbnb-base", "prettier"],
"globals": {
"Atomics": "readonly",
"SharedArrayBuffer": "readonly"
},
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": 2018,
"sourceType": "module",
"allowImportExportEverywhere": true
},
"plugins": [
"prettier",
"@typescript-eslint"
],
"rules": {
"prettier/prettier": "error",
"class-methods-use-this": [
"error",
{"exceptMethods": ["requestDidStart", "willSendRequest", "willSendResponse", "errorFromResponse"]}
],
"camelcase": 0,
"no-undef": 0,
"no-new": 0,
"no-shadow": 0,
"@typescript-eslint/no-shadow": ["error", { "allow": ["err"] }],
"no-console": "off",
"no-use-before-define": "warn",
"no-constant-condition": "off",
"import/no-unresolved": "off",
"import/prefer-default-export": "warn",
"import/extensions": "off",
"class-methods-use-this": "off",
"@typescript-eslint/array-type": [2, { "default": "array" }],
"@typescript-eslint/consistent-type-definitions": [2, "interface"],
"@typescript-eslint/no-explicit-any": "error",
"@typescript-eslint/no-for-in-array": "error",
"@typescript-eslint/no-inferrable-types": "error",
"@typescript-eslint/no-use-before-define": "warn",
"no-unused-vars": "off",
"@typescript-eslint/no-unused-vars": "warn",
"no-underscore-dangle": "off",
"prefer-destructuring": "off"
},
"settings": {
"import/extensions": [".js", ".ts"],
"import/parsers": {
"@typescript-eslint/parser": [".ts", ".tsx"]
}
}
}

View file

@ -25,10 +25,6 @@ build:
script: script:
- npm install - npm install
- npm run build - npm run build
artifacts:
expire_in: 1 hour
paths:
- lib
pages: pages:
stage: deploy stage: deploy
@ -49,8 +45,6 @@ npm_publish:
script: script:
- npm config set '//registry.npmjs.org/:_authToken' "${NPM_TOKEN}" - npm config set '//registry.npmjs.org/:_authToken' "${NPM_TOKEN}"
- npm publish - npm publish
dependencies:
- build
clean: clean:
when: always when: always

View file

@ -5,15 +5,17 @@ API Docs [here](https://riksolo.pages.riksolo.com/ts-osc/)
## Usage example ## Usage example
```javascript ```javascript
import {OSCClient, OSCType, OSCServer} from 'ts-osc'; import {OSCClient, OSCType} from 'ts-osc';
const client = new OSCClient("localhost", 8000); const client = new OSCClient({
outHost: "localhost",
outPort: 8000,
inPort: 8000
})
client.send('/hello', OSCType.String, "hello"); client.send('/hello', OSCType.String, "hello");
const server = new OSCServer("0.0.0.0", 8000); client.on('message', (msg)=>{
server.on('message', (msg)=>{
console.log(msg); console.log(msg);
}) })
``` ```

191
package-lock.json generated
View file

@ -1,6 +1,6 @@
{ {
"name": "ts-osc", "name": "ts-osc",
"version": "0.2.3", "version": "0.1.2",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
@ -460,17 +460,6 @@
} }
} }
}, },
"cliui": {
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
"integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
"dev": true,
"requires": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
"wrap-ansi": "^7.0.0"
}
},
"color-convert": { "color-convert": {
"version": "1.9.3", "version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@ -510,27 +499,6 @@
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true "dev": true
}, },
"copyfiles": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.4.1.tgz",
"integrity": "sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==",
"dev": true,
"requires": {
"glob": "^7.0.5",
"minimatch": "^3.0.3",
"mkdirp": "^1.0.4",
"noms": "0.0.0",
"through2": "^2.0.1",
"untildify": "^4.0.0",
"yargs": "^16.1.0"
}
},
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
"dev": true
},
"cosmiconfig": { "cosmiconfig": {
"version": "7.0.0", "version": "7.0.0",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz",
@ -699,12 +667,6 @@
"is-symbol": "^1.0.2" "is-symbol": "^1.0.2"
} }
}, },
"escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
"dev": true
},
"escape-string-regexp": { "escape-string-regexp": {
"version": "1.0.5", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
@ -1196,12 +1158,6 @@
"integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
"dev": true "dev": true
}, },
"get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"dev": true
},
"get-intrinsic": { "get-intrinsic": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz",
@ -1541,12 +1497,6 @@
"has-symbols": "^1.0.1" "has-symbols": "^1.0.1"
} }
}, },
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
"dev": true
},
"isexe": { "isexe": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@ -1976,12 +1926,6 @@
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true "dev": true
}, },
"mkdirp": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
"dev": true
},
"ms": { "ms": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@ -2006,16 +1950,6 @@
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
"dev": true "dev": true
}, },
"noms": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz",
"integrity": "sha1-2o69nzr51nYJGbJ9nNyAkqczKFk=",
"dev": true,
"requires": {
"inherits": "^2.0.1",
"readable-stream": "~1.0.31"
}
},
"normalize-package-data": { "normalize-package-data": {
"version": "2.5.0", "version": "2.5.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
@ -2283,12 +2217,6 @@
"fast-diff": "^1.1.2" "fast-diff": "^1.1.2"
} }
}, },
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
},
"progress": { "progress": {
"version": "2.0.3", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
@ -2322,18 +2250,6 @@
"path-type": "^3.0.0" "path-type": "^3.0.0"
} }
}, },
"readable-stream": {
"version": "1.0.34",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
"dev": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
"isarray": "0.0.1",
"string_decoder": "~0.10.x"
}
},
"rechoir": { "rechoir": {
"version": "0.6.2", "version": "0.6.2",
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
@ -2349,12 +2265,6 @@
"integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
"dev": true "dev": true
}, },
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
"dev": true
},
"require-from-string": { "require-from-string": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
@ -2417,12 +2327,6 @@
"tslib": "^1.9.0" "tslib": "^1.9.0"
} }
}, },
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
},
"semver": { "semver": {
"version": "5.7.1", "version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
@ -2645,12 +2549,6 @@
"define-properties": "^1.1.3" "define-properties": "^1.1.3"
} }
}, },
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
"dev": true
},
"stringify-object": { "stringify-object": {
"version": "3.3.0", "version": "3.3.0",
"resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
@ -2742,48 +2640,6 @@
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
"dev": true "dev": true
}, },
"through2": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
"integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
"dev": true,
"requires": {
"readable-stream": "~2.3.6",
"xtend": "~4.0.1"
},
"dependencies": {
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"dev": true
},
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
"dev": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
"safe-buffer": "~5.1.0"
}
}
}
},
"to-regex-range": { "to-regex-range": {
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@ -2867,12 +2723,6 @@
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
"dev": true "dev": true
}, },
"untildify": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
"integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
"dev": true
},
"uri-js": { "uri-js": {
"version": "4.4.1", "version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@ -2882,12 +2732,6 @@
"punycode": "^2.1.0" "punycode": "^2.1.0"
} }
}, },
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
"dev": true
},
"v8-compile-cache": { "v8-compile-cache": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz",
@ -2980,18 +2824,6 @@
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true "dev": true
}, },
"xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
"dev": true
},
"y18n": {
"version": "5.0.5",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz",
"integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==",
"dev": true
},
"yallist": { "yallist": {
"version": "3.1.1", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
@ -3004,27 +2836,6 @@
"integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==",
"dev": true "dev": true
}, },
"yargs": {
"version": "16.2.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
"integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
"dev": true,
"requires": {
"cliui": "^7.0.2",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
"string-width": "^4.2.0",
"y18n": "^5.0.5",
"yargs-parser": "^20.2.2"
}
},
"yargs-parser": {
"version": "20.2.4",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
"integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
"dev": true
},
"yocto-queue": { "yocto-queue": {
"version": "0.1.0", "version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",

View file

@ -1,6 +1,6 @@
{ {
"name": "ts-osc", "name": "ts-osc",
"version": "0.3.2", "version": "0.2.1",
"description": "Fully TypeScript-native OSC Client based on osc-min", "description": "Fully TypeScript-native OSC Client based on osc-min",
"main": "./lib/index.js", "main": "./lib/index.js",
"types": "./lib/index.d.ts", "types": "./lib/index.d.ts",
@ -9,9 +9,8 @@
"compile": "tsc", "compile": "tsc",
"watch": "tsc --watch", "watch": "tsc --watch",
"docs": "typedoc --out docs ./src/index.ts", "docs": "typedoc --out docs ./src/index.ts",
"copy": "copyfiles -u 1 -f ./src/**/*.d.ts ./lib",
"clean": "rimraf lib", "clean": "rimraf lib",
"build": "run-s clean compile copy docs", "build": "run-s clean compile docs",
"lint": "eslint ./src --ext .js,.ts", "lint": "eslint ./src --ext .js,.ts",
"lint:fix": "npm run lint -- --fix" "lint:fix": "npm run lint -- --fix"
}, },
@ -34,7 +33,6 @@
"@types/node": "^14.14.22", "@types/node": "^14.14.22",
"@typescript-eslint/eslint-plugin": "^4.14.0", "@typescript-eslint/eslint-plugin": "^4.14.0",
"@typescript-eslint/parser": "^4.14.0", "@typescript-eslint/parser": "^4.14.0",
"copyfiles": "^2.4.1",
"eslint": "^7.18.0", "eslint": "^7.18.0",
"eslint-config-prettier": "^7.2.0", "eslint-config-prettier": "^7.2.0",
"eslint-plugin-prettier": "^3.3.1", "eslint-plugin-prettier": "^3.3.1",

View file

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

View file

@ -1,16 +1,16 @@
import * as dgram from 'dgram'; import * as dgram from 'dgram';
import { toBuffer } from 'osc-min'; import { OSCArgument, OSCType, toBuffer, OSCArgumentType } from 'osc-min';
import { OSCArgument, OSCType, OSCArgumentType } from './types'; import { EventEmitter } from 'events';
/** /**
* OSC Client, handles sending OSC messages * OSC Client base class, handles sending and receiving OSC messages
``` ```
const osc = new OSCClient("192.168.0.44", 8000); const osc = new OSCClient("192.168.0.44", 8000)
``` ```
*/ */
export class OSCClient { export class OSCClient {
public socket: dgram.Socket; private socket: dgram.Socket;
private host: string; private host: string;
private port: number; private port: number;
constructor(host: string, port: number) { constructor(host: string, port: number) {
@ -19,14 +19,14 @@ export class OSCClient {
this.socket = dgram.createSocket({ type: 'udp4', reuseAddr: true }); this.socket = dgram.createSocket({ type: 'udp4', reuseAddr: true });
} }
public sendPacket(packet: Buffer): void { private sendPacket(packet: Buffer): void {
this.socket.send(packet, 0, packet.length, this.port, this.host); this.socket.send(packet, 0, packet.length, this.port, this.host);
} }
/** /**
* Send an OSC message * Send an OSC message
``` ```
osc.send("/osc/url", OSCType.String, "hello"); osc.send("/osc/url", OSCType.String, "hello")
``` ```
*/ */
@ -39,12 +39,4 @@ export class OSCClient {
const encoded = toBuffer(address, [arg]); const encoded = toBuffer(address, [arg]);
this.sendPacket(encoded); this.sendPacket(encoded);
} }
/**
* Close the connection
*/
public close(): void {
this.socket.close();
}
} }

View file

@ -1,7 +1,6 @@
import EventEmitter = require('events'); import EventEmitter = require('events');
import * as dgram from 'dgram'; import * as dgram from 'dgram';
import { fromBuffer } from 'osc-min'; import { OSCType, OSCArgumentType, fromBuffer } from 'osc-min';
import { OSCType, OSCArgumentType } from './types';
export interface ReceivedOSCMessage<T extends OSCType> { export interface ReceivedOSCMessage<T extends OSCType> {
address: string; address: string;
@ -15,58 +14,27 @@ export declare interface OSCServer {
Emitted whenever an OSC message is received on inPort Emitted whenever an OSC message is received on inPort
@event @event
*/ */
on(event: 'message', listener: <T extends OSCType>(message: ReceivedOSCMessage<T>) => void): this; on(event: 'message', listener: (message: ReceivedOSCMessage<OSCType>) => void): this;
/** /**
Emitted when OSC client is listening on inPort Emitted when OSC client is listening on inPort
@event @event
*/ */
on(event: 'listening', listener: () => void): this; on(event: 'listening', listener: () => void): this;
/**
* Emitted when OSC socket is closed
@event
*/
on(event: 'close', listener: () => void): this;
/**
* Emitted whenever an error occurs
@event
*/
on(event: 'error', listener: (exception: Error) => void): this;
} }
/**
* OSC Server, handles receiving OSC messages
```
const osc = new OSCServer("192.168.0.44", 8000);
```
*/
export class OSCServer extends EventEmitter { export class OSCServer extends EventEmitter {
public socket: dgram.Socket; private socket: dgram.Socket;
constructor(bindAddress: string, port: number) { constructor(address: string, port: number) {
super(); super();
this.socket = dgram.createSocket({ type: 'udp4', reuseAddr: true }); this.socket = dgram.createSocket({ type: 'udp4', reuseAddr: true });
this.socket.bind({ this.socket.bind(port, address);
port,
address: bindAddress,
exclusive: true,
});
this.socket.on('listening', () => { this.socket.on('listening', () => {
this.emit('listening'); this.emit('listening');
}); });
this.socket.on('close', () => {
this.emit('close');
});
this.socket.on('error', (e) => {
this.emit('error', e);
});
this.socket.on('message', (msg) => { this.socket.on('message', (msg) => {
const decoded = fromBuffer(msg); const decoded = fromBuffer(msg);
@ -81,12 +49,4 @@ export class OSCServer extends EventEmitter {
} }
}); });
} }
/**
* close the server
*/
public close(): void {
this.socket.close();
}
} }

View file

@ -1,31 +0,0 @@
export interface OSCArgument<T extends OSCType> {
type: T;
value: OSCArgumentType<T>;
}
export enum OSCType {
String = 'string',
Float = 'float',
Integer = 'integer',
Blob = 'blob',
True = 'true',
False = 'false',
Null = 'null',
Bang = 'bang',
Timetag = 'timetag',
Array = 'array',
}
export type OSCArgumentType<T extends OSCType> = T extends OSCType.String
? string
: T extends OSCType.Float | OSCType.Integer | OSCType.Timetag
? number
: T extends OSCType.True
? true
: T extends OSCType.False
? false
: T extends OSCType.Blob
? Buffer
: T extends OSCType.Array
? OSCArgument<OSCType>[]
: null;

View file

@ -1,5 +1,16 @@
declare module 'osc-min' { declare module 'osc-min' {
import { OSCType, OSCArgumentType, OSCArgument } from '../types'; export const enum OSCType {
String = 'string',
Float = 'float',
Integer = 'integer',
Blob = 'blob',
True = 'true',
False = 'false',
Null = 'null',
Bang = 'bang',
Timetag = 'timetag',
Array = 'array',
}
export type OSCTimeTag = [number, number]; export type OSCTimeTag = [number, number];
export type OutgoingOSCArgsTypes = (OSCArgument<OSCType> | Buffer | boolean | string | number)[]; export type OutgoingOSCArgsTypes = (OSCArgument<OSCType> | Buffer | boolean | string | number)[];
@ -20,6 +31,25 @@ declare module 'osc-min' {
elements: (OSCMessage | OSCBundle)[]; elements: (OSCMessage | OSCBundle)[];
} }
export type OSCArgumentType<T extends OSCType> = T extends OSCType.String
? string
: T extends OSCType.Float | OSCType.Integer | OSCType.Timetag
? number
: T extends OSCType.True
? true
: T extends OSCType.False
? false
: T extends OSCType.Blob
? Buffer
: T extends OSCType.Array
? OSCArgument<OSCType>[]
: null;
export interface OSCArgument<T extends OSCType> {
type: T;
value: OSCArgumentType<T>;
}
type OSCPacket = OSCMessage | OSCBundle; type OSCPacket = OSCMessage | OSCBundle;
export function fromBuffer(buffer: Buffer, strict?: boolean): OSCPacket; export function fromBuffer(buffer: Buffer, strict?: boolean): OSCPacket;