99const path = require ( "path" ) ;
1010const { exec, execFile, spawn } = require ( "child_process" ) ;
1111const fs = require ( "fs" ) ;
12+ const ngrok = require ( "ngrok-electron" ) ;
1213const pkg = require ( "./package.json" ) ;
1314const APP_URL = `http://${ pkg . env . SERVER_HOST } :${ pkg . env . SERVER_PORT } ` ;
1415
@@ -26,7 +27,7 @@ const SHARING_PKG = {
2627
2728const createWindow = ( ) => {
2829 const win = new BrowserWindow ( {
29- width : 555 ,
30+ width : 557 ,
3031 height : 525 ,
3132 webPreferences : {
3233 preload : path . join ( __dirname , "preload.js" ) ,
@@ -104,14 +105,35 @@ const ipcInit = () => {
104105 if ( _params . password ) {
105106 params . push ( `--password ${ _params . password } ` ) ;
106107 }
108+ params . push ( "--dev" ) ;
107109
108110 serviceLs = execFile ( binaryPath , params , { shell : true } ) ;
109111 serviceLs . stdout . on ( "data" , function ( data ) {
110112 console . log ( "stdout: \r\n" + data ) ;
111- let dataStr = data . toString ( ) ;
112- if ( dataStr . indexOf ( "link" ) >= 0 ) {
113- let url = dataStr . match ( / l i n k : \s * ( .* ?) \s / ) [ 1 ] ;
114- reslove ( { success : true , url } ) ;
113+ try {
114+ const resData = JSON . parse ( data ) ;
115+ if ( resData . success ) {
116+ const linkInfo = resData . data . link ;
117+ let url = `${ linkInfo . protocol } ://${ linkInfo . host } :${ linkInfo . port } ${ linkInfo . path } ` ;
118+ if ( _params . ngrok ) {
119+ useNgrok ( _params . ngrok , linkInfo . port ) . then (
120+ ( ngrokUrl ) => {
121+ url = `${ ngrokUrl } ${ linkInfo . path } ` ;
122+ reslove ( { success : true , url } ) ;
123+ } ,
124+ ( err ) => {
125+ reject ( err ) ;
126+ }
127+ ) ;
128+ } else {
129+ reslove ( { success : true , url } ) ;
130+ }
131+ } else {
132+ reject ( resData . msg ) ;
133+ }
134+ } catch ( err ) {
135+ // console.log("err", err);
136+ reject ( err ) ;
115137 }
116138 } ) ;
117139
@@ -146,7 +168,9 @@ const ipcInit = () => {
146168 ipcMain . handle ( "end-sharing" , ( event ) => {
147169 return new Promise ( ( reslove , reject ) => {
148170 execFile ( "kill" , [ serviceLs . pid ] ) ;
149- reslove ( ) ;
171+ ngrok . kill ( ) . then ( ( ) => {
172+ reslove ( ) ;
173+ } ) ;
150174 } ) ;
151175 } ) ;
152176
@@ -169,3 +193,26 @@ const ipcInit = () => {
169193 } ) ;
170194 } ) ;
171195} ;
196+
197+ function useNgrok ( authtoken , port ) {
198+ return new Promise ( ( reslove , reject ) => {
199+ try {
200+ ngrok
201+ . connect ( {
202+ authtoken,
203+ addr : port ,
204+ } )
205+ . then (
206+ ( res ) => {
207+ reslove ( res ) ;
208+ } ,
209+ ( err ) => {
210+ console . log ( "ngrok error:" , err ) ;
211+ reject ( err ) ;
212+ }
213+ ) ;
214+ } catch ( err ) {
215+ reject ( err ) ;
216+ }
217+ } ) ;
218+ }
0 commit comments