1
1
import { PacketStream } from "./packet-stream" ;
2
2
import * as net from "net" ;
3
- import * as semver from "semver" ;
4
3
import * as ws from "ws" ;
5
4
import temp = require( "temp" ) ;
6
5
import * as helpers from "../../common/helpers" ;
@@ -12,25 +11,65 @@ export class SocketProxyFactory implements ISocketProxyFactory {
12
11
private $projectDataService : IProjectDataService ,
13
12
private $options : IOptions ) { }
14
13
15
- public createSocketProxy ( factory : ( ) => net . Socket ) : IFuture < any > {
16
- return ( ( ) => {
17
- let socketFactory = ( callback : ( _socket : net . Socket ) => void ) => helpers . connectEventually ( factory , callback ) ;
14
+ public createTCPSocketProxy ( factory : ( ) => net . Socket ) : any {
15
+ let socketFactory = ( callback : ( _socket : net . Socket ) => void ) => helpers . connectEventually ( factory , callback ) ;
18
16
19
- this . $projectDataService . initialize ( this . $projectData . projectDir ) ;
20
- let frameworkVersion = this . $projectDataService . getValue ( "tns-ios" ) . wait ( ) . version ;
21
- let result : any ;
17
+ this . $logger . info ( "\nSetting up proxy...\nPress Ctrl + C to terminate, or disconnect.\n" ) ;
22
18
23
- if ( semver . gte ( frameworkVersion , "1.4.0" ) ) {
24
- result = this . createTcpSocketProxy ( socketFactory ) ;
25
- } else {
26
- result = this . createWebSocketProxy ( socketFactory ) ;
27
- }
19
+ let server = net . createServer ( {
20
+ allowHalfOpen : true
21
+ } ) ;
22
+
23
+ server . on ( "connection" , ( frontendSocket : net . Socket ) => {
24
+ this . $logger . info ( "Frontend client connected." ) ;
25
+
26
+ frontendSocket . on ( "end" , ( ) => {
27
+ this . $logger . info ( 'Frontend socket closed!' ) ;
28
+ if ( ! ( this . $config . debugLivesync && this . $options . watch ) ) {
29
+ process . exit ( 0 ) ;
30
+ }
31
+ } ) ;
28
32
29
- return result ;
30
- } ) . future < any > ( ) ( ) ;
33
+ socketFactory ( ( backendSocket : net . Socket ) => {
34
+ this . $logger . info ( "Backend socket created." ) ;
35
+
36
+ backendSocket . on ( "end" , ( ) => {
37
+ this . $logger . info ( "Backend socket closed!" ) ;
38
+ if ( ! ( this . $config . debugLivesync && this . $options . watch ) ) {
39
+ process . exit ( 0 ) ;
40
+ }
41
+ } ) ;
42
+
43
+ frontendSocket . on ( "close" , ( ) => {
44
+ console . log ( "frontend socket closed" ) ;
45
+ if ( ! ( < any > backendSocket ) . destroyed ) {
46
+ backendSocket . destroy ( ) ;
47
+ }
48
+ } ) ;
49
+ backendSocket . on ( "close" , ( ) => {
50
+ console . log ( "backend socket closed" ) ;
51
+ if ( ! ( < any > frontendSocket ) . destroyed ) {
52
+ frontendSocket . destroy ( ) ;
53
+ }
54
+ } ) ;
55
+
56
+ backendSocket . pipe ( frontendSocket ) ;
57
+ frontendSocket . pipe ( backendSocket ) ;
58
+ frontendSocket . resume ( ) ;
59
+ } ) ;
60
+ } ) ;
61
+
62
+ let socketFileLocation = temp . path ( { suffix : ".sock" } ) ;
63
+ server . listen ( socketFileLocation ) ;
64
+ if ( ! this . $options . client ) {
65
+ this . $logger . info ( "socket-file-location: " + socketFileLocation ) ;
66
+ }
67
+
68
+ return server ;
31
69
}
32
70
33
- private createWebSocketProxy ( socketFactory : ( handler : ( socket : net . Socket ) => void ) => void ) : ws . Server {
71
+ public createWebSocketProxy ( factory : ( ) => net . Socket ) : ws . Server {
72
+ let socketFactory = ( callback : ( _socket : net . Socket ) => void ) => helpers . connectEventually ( factory , callback ) ;
34
73
// NOTE: We will try to provide command line options to select ports, at least on the localhost.
35
74
let localPort = 8080 ;
36
75
@@ -86,58 +125,5 @@ export class SocketProxyFactory implements ISocketProxyFactory {
86
125
this . $logger . info ( "Opened localhost " + localPort ) ;
87
126
return server ;
88
127
}
89
-
90
- private createTcpSocketProxy ( socketFactory : ( handler : ( socket : net . Socket ) => void ) => void ) : net . Server {
91
- this . $logger . info ( "\nSetting up proxy...\nPress Ctrl + C to terminate, or disconnect.\n" ) ;
92
-
93
- let server = net . createServer ( {
94
- allowHalfOpen : true
95
- } ) ;
96
-
97
- server . on ( "connection" , ( frontendSocket : net . Socket ) => {
98
- this . $logger . info ( "Frontend client connected." ) ;
99
-
100
- frontendSocket . on ( "end" , ( ) => {
101
- this . $logger . info ( 'Frontend socket closed!' ) ;
102
- if ( ! ( this . $config . debugLivesync && this . $options . watch ) ) {
103
- process . exit ( 0 ) ;
104
- }
105
- } ) ;
106
-
107
- socketFactory ( ( backendSocket : net . Socket ) => {
108
- this . $logger . info ( "Backend socket created." ) ;
109
-
110
- backendSocket . on ( "end" , ( ) => {
111
- this . $logger . info ( "Backend socket closed!" ) ;
112
- if ( ! ( this . $config . debugLivesync && this . $options . watch ) ) {
113
- process . exit ( 0 ) ;
114
- }
115
- } ) ;
116
-
117
- frontendSocket . on ( "close" , ( ) => {
118
- if ( ! ( < any > backendSocket ) . destroyed ) {
119
- backendSocket . destroy ( ) ;
120
- }
121
- } ) ;
122
- backendSocket . on ( "close" , ( ) => {
123
- if ( ! ( < any > frontendSocket ) . destroyed ) {
124
- frontendSocket . destroy ( ) ;
125
- }
126
- } ) ;
127
-
128
- backendSocket . pipe ( frontendSocket ) ;
129
- frontendSocket . pipe ( backendSocket ) ;
130
- frontendSocket . resume ( ) ;
131
- } ) ;
132
- } ) ;
133
-
134
- let socketFileLocation = temp . path ( { suffix : ".sock" } ) ;
135
- server . listen ( socketFileLocation ) ;
136
- if ( ! this . $options . client ) {
137
- this . $logger . info ( "socket-file-location: " + socketFileLocation ) ;
138
- }
139
-
140
- return server ;
141
- }
142
128
}
143
129
$injector . register ( "socketProxyFactory" , SocketProxyFactory ) ;
0 commit comments