import { createWindow } from './createWindow'; import { ipcMain } from "electron"; import WebSocket from 'ws'; import { windowEmitter } from './windowEmitter'; import { authUser, authLogin } from './auth'; const portAudio = require('naudiodon'); /* * The main function will be run after electron app is ready. */ export function main(): void { // 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'); } 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 windowMount = (): void => { windowEmitter.emit('window-active', true); // ipc event handlers ipcMain.on('send-message', sendMessage); ipcMain.on('auth-login', authLogin); } const windowDismount = (): void => { windowEmitter.emit('window-active', false); // TODO: Gracefully close socket connection ipcMain.removeAllListeners('send-message'); ipcMain.removeAllListeners('auth-login'); 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); // TODO: FIX recorder restart bug // let audioInput: string[] = []; // const updateRecorder = async (Event: any, record: boolean): void => { // if (record) { // ia.resume(); // } else { // ia.pause(); // const audio = processAudio(audioInput); // sendAudio(audio); // audioInput = []; // } // } // function processAudio(audioInput: Array): Buffer { // let audio = ''; // audioInput.forEach(chunk => audio += chunk); // return Buffer.from(audio, "base64"); // } // const 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); // }); }