From: riqo Date: Tue, 9 Feb 2021 00:25:17 +0000 (-0600) Subject: add socket code X-Git-Tag: v0.9~97 X-Git-Url: https://andrewgundersen.net/repos?a=commitdiff_plain;h=5a72970f347b5a250c82b1bdf99a5dc84d62f606;p=mime-chat add socket code --- diff --git a/src/background/recorder.ts b/src/background/recorder.ts deleted file mode 100644 index 9bb9706..0000000 --- a/src/background/recorder.ts +++ /dev/null @@ -1,41 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-var-requires -const portAudio = require('naudiodon'); -// eslint-disable-next-line @typescript-eslint/no-var-requires - -let audio: string; -let audioInput: string[] = []; - -export function initRecorder() { - - let ia = new portAudio.AudioIO({ - inOptions: { - channelCount: 1, - sampleFormat: 16, - sampleRate: 16000, - deviceId: -1, - closeOnError: false, - } - }); - - ia.setEncoding('base64'); - ia.start(); - ia.pause(); - ia.on('error', (e: Error) => { - console.log('error recording audio', + e); - }); - ia.on('data', (chunk: string) => { - audioInput.push(chunk); - console.log('Got %d characters of string data:', chunk.length); - }); -} - -async function processData(chunks: string[]): Buffer | Error { - audio = ''; - chunks.forEach(s => { - audio += s; - }) - const buffer = Buffer.from(audio, "base64"); - audioInput = []; - return buffer; -} - diff --git a/src/background/run.ts b/src/background/run.ts index f64e181..21b5151 100644 --- a/src/background/run.ts +++ b/src/background/run.ts @@ -1,49 +1,44 @@ import { createWindow } from './createWindow'; import { ipcMain } from "electron"; -import WebSocket from 'ws'; +import { initSession, sendMessage} from './session'; import { windowEmitter } from './windowEmitter'; import { authUser, authLogin } from './auth'; const portAudio = require('naudiodon'); +interface ipcRendererPayload { + endpoint: string; + message: any; +} + /* * The main function will be run after electron app is ready. */ export function main(): void { + // Instantiate socket session with crimata-platorm. + initSession(); + // mount auth-user listener ipcMain.on('auth-user', authUser); // create main window. const win = createWindow({ width: 350, height: 525, resizable: false }); - // Instantiate socket session with crimata-platorm. - const socket = new WebSocket('socket://localhost:8080'); - socket.binaryType = 'arraybuffer'; - const initSession = (): void => { - socket.send('hernandeze2@xavier.edu'); - } + windowEmitter.on('ipc-renderer', (payload: ipcRendererPayload) => { + win.webContents.send(payload.endpoint, { + message: payload.message + }); + }); - const sendMessage = (Event: any, payload: any): void => { - socket.send(JSON.stringify(payload)); - } - - const sendAudio = (data: Buffer): void => { - socket.send(data); - } - - const receiveMessage = (message: string): void => { - // NOTE assuming message is JSON string - const parsed = JSON.parse(message); - win.webContents.send('render-message', { - message: parsed - }); + const handleIpcRender = (event: any, arg: any) => { + sendMessage(arg) } const windowMount = (): void => { windowEmitter.emit('window-active', true); // ipc event handlers - ipcMain.on('send-message', sendMessage); + ipcMain.on('send-message', handleIpcRender); ipcMain.on('auth-login', authLogin); } @@ -55,10 +50,6 @@ export function main(): void { ipcMain.removeAllListeners('auth-user'); } - // socket handlers - socket.on('connect', initSession); - socket.on("message", receiveMessage); - // Handle window mount and dismount. win.webContents.on('did-finish-load', windowMount); win.on("closed", windowDismount); diff --git a/src/background/session.ts b/src/background/session.ts new file mode 100644 index 0000000..060c554 --- /dev/null +++ b/src/background/session.ts @@ -0,0 +1,42 @@ +import WebSocket from 'ws'; +import { windowEmitter } from './windowEmitter'; + +const ip = 'ws://localhost'; +const port = 8080; +const username = 'hernandeze2@xavier.edu'; + +const receiveMessage = (message: string): void => { + // NOTE assuming message is JSON string + const parsed = JSON.parse(message); + windowEmitter.emit('ipc-renderer', { + endpoint: 'render-message', + message: parsed + }); +} + +let socket: WebSocket; + +export function initSession() { + + try { + socket = new WebSocket(`${ip}:${port}`); + socket.binaryType = 'arraybuffer'; + + socket.on('open', () => { + socket.send(username); + }) + + socket.on("message", receiveMessage); + + } catch(e) { + console.log('error connecting socket', + e); + } +} + +export const sendMessage = (content: string | Buffer) => { + if (content instanceof Buffer) { + socket.send(content); + } else { + socket.send(JSON.stringify(content)); + } +}