11const { ipcMain } = require ( "electron" ) ;
2+ const { dialog } = require ( "electron" ) ;
23// const store = require('./src/client/store.js')
3- const WebSocketClient = require ( 'websocket' ) . client
4+ const WebSocketClient = require ( "websocket" ) . client ;
5+ const fs = require ( "fs" ) ;
6+ const path = require ( "path" ) ;
7+ const testingController = require ( "./main_testingController" ) ;
48
59const wsController = {
6- wsConnect : null ,
10+ wsConnect : null ,
711 openWSconnection ( event , reqResObj , connectionArray ) {
8- //set reqResObj for WS
9- reqResObj . response . messages = [ ] ;
10- reqResObj . request . messages = [ ] ;
11- reqResObj . connection = 'pending' ;
12- reqResObj . closeCode = 0 ;
13- reqResObj . timeSent = Date . now ( ) ;
14-
15- //update frontend its pending
16- event . sender . send ( "reqResUpdate" , reqResObj ) ;
17-
18- //create socket
19- let socket ;
20- try {
21- socket = new WebSocketClient ( )
22- }
23- catch ( err ) {
24- reqResObj . connection = 'error' ;
25- event . sender . send ( "reqResUpdate" , reqResObj ) ;
26- return ;
27- }
28-
29- //when it connects, update connectionArray
30- socket . on ( 'connect' , ( connection ) => {
31- this . wsConnect = connection ;
32- reqResObj . connection = 'open' ;
33- const openConnectionObj = {
34- connection,
35- protocol : 'WS' ,
36- id : reqResObj . id ,
37- } ;
38- connectionArray . push ( openConnectionObj ) ;
39- event . sender . send ( "update-connectionArray" , connectionArray ) ;
40- event . sender . send ( "reqResUpdate" , reqResObj ) ;
41- this . wsConnect . on ( 'close' , ( ) => {
42- console . log ( 'closed WS' ) ;
43- } ) ;
44- } ) ;
45-
46- //listener for failed socket connection,
47- socket . on ( 'connectFailed' , ( error ) => {
48- console . log ( 'WS Connect Error: ' + error . toString ( ) ) ;
49- reqResObj . connection = "error" ;
50- reqResObj . timeReceived = Date . now ( ) ;
51- // reqResObj.response.events.push(JSON.stringify(errorsObj));
52- event . sender . send ( "reqResUpdate" , reqResObj ) ;
53- } ) ;
54-
55- //connect socket
56- socket . connect ( reqResObj . url ) ;
57- } ,
58-
59- closeWs ( event ) {
60- this . wsConnect . close ( ) ;
61- } ,
62-
63- sendWebSocketMessage ( event , reqResObj , inputMessage ) {
64- //send message to ws server
65- this . wsConnect . send ( inputMessage ) ;
66-
67- //push sent message to reqResObj message array as a request message
68- reqResObj . request . messages . push ( {
69- data : inputMessage ,
70- timeReceived : Date . now ( ) ,
71- } ) ;
72-
73- //update store
74- event . sender . send ( "reqResUpdate" , reqResObj ) ;
75-
76- //listener for return message from ws server
77- //push into message array under responses
78- this . wsConnect . on ( 'message' , ( e ) => {
79- reqResObj . response . messages . push ( {
80- data : e . utf8Data ,
81- timeReceived : Date . now ( ) ,
82- } ) ;
83- //update store
84- event . sender . send ( "reqResUpdate" , reqResObj ) ;
85- } ) ;
86- } ,
12+ //set reqResObj for WS
13+ reqResObj . response . messages = [ ] ;
14+ reqResObj . request . messages = [ ] ;
15+ reqResObj . connection = "pending" ;
16+ reqResObj . closeCode = 0 ;
17+ reqResObj . timeSent = Date . now ( ) ;
18+
19+ //update frontend its pending
20+ event . sender . send ( "reqResUpdate" , reqResObj ) ;
21+
22+ //create socket
23+ //check websocket npm package doc
24+ let socket ;
25+ try {
26+ socket = new WebSocketClient ( ) ;
27+ } catch ( err ) {
28+ reqResObj . connection = "error" ;
29+ event . sender . send ( "reqResUpdate" , reqResObj ) ;
30+ return ;
31+ }
32+
33+ //when it connects, update connectionArray
34+ //connection here means a single connection being established
35+ socket . on ( "connect" , ( connection ) => {
36+ console . log ( "websocket client connected" ) ;
37+ this . wsConnect = connection ;
38+ reqResObj . connection = "open" ;
39+ reqResObj . response . connection = "open" ;
40+ // testingController.runTest(reqResObj.request.testContent, reqResObj);
41+ const openConnectionObj = {
42+ connection,
43+ protocol : "WS" ,
44+ id : reqResObj . id ,
45+ } ;
46+ connectionArray . push ( openConnectionObj ) ;
47+ event . sender . send ( "update-connectionArray" , connectionArray ) ;
48+ event . sender . send ( "reqResUpdate" , reqResObj ) ;
49+ //connection.on
50+ this . wsConnect . on ( "close" , ( ) => {
51+ console . log ( "closed WS" ) ;
52+ } ) ;
53+ } ) ;
54+
55+ //listener for failed socket connection,
56+ socket . on ( "connectFailed" , ( error ) => {
57+ console . log ( "WS Connect Error: " + error . toString ( ) ) ;
58+ reqResObj . connection = "error" ;
59+ reqResObj . timeReceived = Date . now ( ) ;
60+ // reqResObj.response.events.push(JSON.stringify(errorsObj)); need to move
61+ event . sender . send ( "reqResUpdate" , reqResObj ) ;
62+ } ) ;
63+
64+ //connect socket
65+ socket . connect ( reqResObj . url ) ;
66+ } ,
67+
68+ closeWs ( event ) {
69+ //connection.close
70+ this . wsConnect . close ( ) ;
71+ } ,
72+
73+ sendWebSocketMessage ( event , reqResObj , inputMessage ) {
74+ //send message to ws server
75+ //connection.send
76+
77+ //check datatype
78+
79+ if ( inputMessage . includes ( "data:image/" ) ) {
80+ const buffer = Buffer . from ( inputMessage , "utf8" ) ;
81+ console . log ( "sending as buffer" ) ;
82+ this . wsConnect . sendBytes ( buffer ) ;
83+ reqResObj . request . messages . push ( {
84+ data : buffer ,
85+ timeReceived : Date . now ( ) ,
86+ } ) ;
87+ } else {
88+ this . wsConnect . send ( inputMessage ) ;
89+ console . log ( "sending as string" ) ;
90+ reqResObj . request . messages . push ( {
91+ data : inputMessage ,
92+ timeReceived : Date . now ( ) ,
93+ } ) ;
94+ }
95+
96+ //update store
97+ event . sender . send ( "reqResUpdate" , reqResObj ) ;
98+
99+ //listener for return message from ws server
100+ //push into message array under responses
101+ //connection.on
102+ this . wsConnect . on ( "message" , ( e ) => {
103+ e . binaryData
104+ ? reqResObj . response . messages . push ( {
105+ data : e . binaryData ,
106+ timeReceived : Date . now ( ) ,
107+ } )
108+ : reqResObj . response . messages . push ( {
109+ data : e . utf8Data ,
110+ timeReceived : Date . now ( ) ,
111+ } ) ;
112+
113+ if ( reqResObj . request . testContent ) {
114+ reqResObj . response . testResult = testingController . runTest (
115+ reqResObj . request . testContent ,
116+ reqResObj
117+ ) ;
118+ console . log ( "the test result" , reqResObj . response . testResult ) ;
119+ }
120+
121+ //update store
122+ event . sender . send ( "reqResUpdate" , reqResObj ) ;
123+ } ) ;
124+ } ,
87125} ;
88126module . exports = ( ) => {
89- // we pass the event object into these controller functions so that we can invoke event.sender.send when we need to make response to renderer process
90- // listener to open wsconnection
91- ipcMain . on ( "open-ws" , ( event , reqResObj , connectionArray ) => {
92- wsController . openWSconnection ( event , reqResObj , connectionArray ) ;
93- } ) ;
94- //listener for sending messages to server
95- ipcMain . on ( "send-ws" , ( event , reqResObj , inputMessage ) => {
96- wsController . sendWebSocketMessage ( event , reqResObj , inputMessage ) ;
97- } ) ;
98- //listerner to close socket connection
99- ipcMain . on ( "close-ws" , ( event ) => {
100- wsController . closeWs ( event ) ;
101- } )
102- } ;
127+ // we pass the event object into these controller functions so that we can invoke event.sender.send when we need to make response to renderer process
128+ // listener to open wsconnection
129+ ipcMain . on ( "open-ws" , ( event , reqResObj , connectionArray ) => {
130+ wsController . openWSconnection ( event , reqResObj , connectionArray ) ;
131+ } ) ;
132+ //listener for sending messages to server
133+ ipcMain . on ( "send-ws" , ( event , reqResObj , inputMessage ) => {
134+ wsController . sendWebSocketMessage ( event , reqResObj , inputMessage ) ;
135+ } ) ;
136+ //listerner to close socket connection
137+ ipcMain . on ( "close-ws" , ( event ) => {
138+ wsController . closeWs ( event ) ;
139+ } ) ;
140+ ipcMain . on ( "exportChatLog" , ( event , outgoingMessages , incomingMessages ) => {
141+ //making sure the messages are in order
142+ let result = outgoingMessages
143+ . map ( ( message ) => {
144+ message . source = "client" ;
145+ return message ;
146+ } )
147+ . concat (
148+ incomingMessages . map ( ( message ) => {
149+ message . source = "server" ;
150+ return message ;
151+ } )
152+ )
153+ . sort ( ( a , b ) => a . timeReceived - b . timeReceived )
154+ . map ( ( message , index ) => ( {
155+ index : index ,
156+ source : message . source ,
157+ data : message . data ,
158+ timeReceived : message . timeReceived ,
159+ } ) ) ;
160+
161+ const data = new Uint8Array ( Buffer . from ( JSON . stringify ( result ) ) ) ;
162+
163+ //showSaveDialog is the windowexplorer that appears
164+ dialog
165+ . showSaveDialog ( { defaultPath : "websocketLog.txt" } )
166+ . then ( ( file_path ) => {
167+ fs . writeFile ( file_path . filePath , data , ( err ) => {
168+ if ( err ) throw err ;
169+ console . log ( "File saved to: " , file_path . filePath ) ;
170+ } ) ;
171+ } ) ;
172+ } ) ;
173+ } ;
0 commit comments