Skip to content

Instantly share code, notes, and snippets.

@cambiata
Last active December 17, 2024 21:31
Show Gist options
  • Save cambiata/2cd96b026e8b7098cfde7bbb02c9f4f7 to your computer and use it in GitHub Desktop.
Save cambiata/2cd96b026e8b7098cfde7bbb02c9f4f7 to your computer and use it in GitHub Desktop.
DoricoWebsocketClient.ts
const clientName = 'DoricoWebsocketClient';
const connect = (): Promise<WebSocket> =>
new Promise(function (resolve, reject) {
const server = new WebSocket('ws://127.0.0.1:4560');
server.onopen = function () {
console.log('Connected');
resolve(server);
};
server.onerror = function (err) {
console.log('error', err);
reject(err);
};
});
const disconnect = (server: WebSocket, sessionToken: string): Promise<void> =>
new Promise(function (resolve, reject) {
server.onmessage = (message) => resolve(JSON.parse(message.data));
server.onerror = (err) => reject(err);
const d = {
message: 'disconnect',
sessionToken: sessionToken
};
server.send(JSON.stringify(d));
});
const getSessiontoken = (server: WebSocket): Promise<string> =>
new Promise(function (resolve, reject) {
server.onmessage = (message) => {
const data = JSON.parse(message.data);
switch (data.message) {
case 'sessiontoken':
console.log('sessiontoken', data.sessionToken);
resolve(data.sessionToken);
break;
default:
console.log('Unknown message', message.data);
reject('Unknown message');
break;
}
}
const d = {
message: 'connect',
clientName: clientName,
handshakeVersion: '1.0'
};
server.send(JSON.stringify(d));
});
const acceptSessionToken = (server: WebSocket, sessionToken: string): Promise<object> =>
new Promise(function (resolve, reject) {
server.onmessage = (message) => resolve(JSON.parse(message.data));
server.onerror = (err) => reject(err);
const d = {
message: 'acceptsessiontoken',
sessionToken: sessionToken
};
server.send(JSON.stringify(d));
});
const command = (server: WebSocket, sessionToken: string, command: string): Promise<object> =>
new Promise(function (resolve, reject) {
server.onmessage = (message) => resolve(JSON.parse(message.data));
server.onerror = (err) => reject(err);
const d = {
message: 'command',
command,
sessionToken
};
server.send(JSON.stringify(d));
});
const delay = (ms: number): Promise<void> =>
new Promise(resolve => setTimeout(resolve, ms));
async function asyncMain() {
const server = await connect();
const sessionToken = await getSessiontoken(server);
const accept = await acceptSessionToken(server, sessionToken);
console.log('accept', accept);
let status = {};
status = await command(server, sessionToken, 'Window.SwitchMode?WindowMode=kWriteMode');
await delay(1000);
status = await command(server, sessionToken, 'NoteInput.Enter?Set=true');
await delay(1000);
status = await command(server, sessionToken, 'NoteInput.MoveRightBar');
await delay(3000);
await disconnect(server, sessionToken);
}
asyncMain();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment