1
1
const { ipcMain } = require ( "electron" ) ;
2
+ const { dialog } = require ( "electron" ) ;
2
3
// 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" ) ;
4
8
5
9
const wsController = {
6
- wsConnect : null ,
10
+ wsConnect : null ,
7
11
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
+ } ,
87
125
} ;
88
126
module . 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