2
2
'use strict' ;
3
3
const path = require ( 'path' ) ;
4
4
const http = require ( 'http' ) ;
5
- const checksum = require ( '../lib' ) . checksum ;
5
+ const { checksum } = require ( '../lib' ) ;
6
+ const statusBar = new ( require ( '../lib/utils' ) . ConsoleStatusBar ) ( 1 , 1 , 100 ) ;
6
7
const WebSocket = require ( 'ws' ) ;
7
8
const WsJsonProtocol = require ( '../lib/ws-json' ) ;
8
9
const { BufferStruct, BufferStructType } = require ( '../lib/buffer-struct' ) ;
9
10
const { Messanger } = require ( '../server/ws-message' ) ;
10
11
12
+ function detail_info ( ) {
13
+ // console.log.apply(console, arguments);
14
+ }
15
+ function info ( ) {
16
+ console . log . apply ( console , arguments ) ;
17
+ }
18
+
11
19
12
20
class RequestForwarder extends Object {
13
21
constructor ( ws , forward_base_uri ) {
@@ -17,19 +25,28 @@ class RequestForwarder extends Object {
17
25
let parsed_uri = new URL ( forward_base_uri ) ;
18
26
if ( parsed_uri . search ) throw new Error ( "Search path is not implemented yet for forward base uri." ) ;
19
27
if ( ! parsed_uri . protocol . match ( / ^ h t t p s ? : $ / i) ) throw new Error ( `Only HTTP(s) protocol is implemented for forward base uri (got ${ parsed_uri . protocol } ).` ) ;
20
- console . log ( forward_base_uri ) ;
28
+ detail_info ( forward_base_uri ) ;
21
29
this . _forward_base_uri = parsed_uri ;
22
30
this . _ws = ws ;
23
31
this . _activeChannels = { } ;
32
+ this . state = [ '> headers' , '-' ] ;
33
+ }
34
+
35
+ setState ( ws , http ) {
36
+ if ( ws ) this . state [ 0 ] = ws ;
37
+ if ( http ) this . state [ 1 ] = http ;
38
+ // statusBar.write(`${this.state[0]} | ${this.state[1]} ${this.parsed_uri}`);
24
39
}
25
40
26
41
handle_request ( message ) {
42
+ const self = this ;
27
43
const eventId = message . event ;
28
44
let req ;
29
45
switch ( eventId ) {
30
46
case 'headers' :
47
+ this . setState ( '> headers' ) ;
31
48
const ireq = message . data ;
32
- console . log ( `< ${ message . channel } : ${ ireq . method } ${ ireq . url } ` ) ;
49
+ info ( `< ${ message . channel } : ${ ireq . method } ${ ireq . url } ` ) ;
33
50
let oreq_uri = new URL ( this . _forward_base_uri . toString ( ) ) ; // clone the original uri
34
51
oreq_uri . href = path . posix . join ( oreq_uri . href , ireq . url ) ;
35
52
const req_params = {
@@ -40,21 +57,24 @@ class RequestForwarder extends Object {
40
57
let sender = function sender ( event_id ) {
41
58
return function ( data ) {
42
59
if ( event_id == 'data' ) {
43
- console . log ( `<: ${ message . channel } : ${ event_id } ${ ireq . method } ${ oreq_uri . pathname } ${ data . length } ${ checksum ( data ) } ` ) ;
60
+ detail_info ( `<: ${ message . channel } : ${ event_id } ${ ireq . method } ${ oreq_uri . pathname } ${ data . length } ` ) ;
44
61
} else {
45
- console . log ( `<: ${ message . channel } : ${ event_id } ${ ireq . method } ${ oreq_uri . pathname } ` ) ;
62
+ detail_info ( `<: ${ message . channel } : ${ event_id } ${ ireq . method } ${ oreq_uri . pathname } ` ) ;
46
63
}
64
+ self . setState ( '< ' + event_id ) ;
47
65
_send ( {
48
66
channel : message . channel ,
49
67
event : event_id ,
50
68
data : data ,
51
69
} )
52
70
}
53
71
}
54
- console . log ( ` :> ${ message . channel } : ${ ireq . method } ${ oreq_uri . toString ( ) } ` ) ;
72
+ detail_info ( ` :> ${ message . channel } : ${ ireq . method } ${ oreq_uri . toString ( ) } ` ) ;
73
+ this . setState ( '> headers' , '> headers ' ) ;
55
74
req = http . request ( oreq_uri . toString ( ) , req_params , function handleResponse ( res ) {
56
75
// res.setEncoding('utf8');
57
- console . log ( `<: ${ message . channel } : ${ res . statusCode } ${ res . statusMessage } / ${ ireq . method } ${ oreq_uri . pathname } ` ) ;
76
+ self . setState ( null , '< headers ' ) ;
77
+ detail_info ( `<: ${ message . channel } : ${ res . statusCode } ${ res . statusMessage } / ${ ireq . method } ${ oreq_uri . pathname } ` ) ;
58
78
sender ( 'headers' ) ( {
59
79
statusCode : res . statusCode ,
60
80
statusMessage : res . statusMessage ,
@@ -67,13 +87,11 @@ class RequestForwarder extends Object {
67
87
this . _registerChannel ( message . channel , req ) ;
68
88
break ;
69
89
case 'data' :
90
+ this . setState ( '> data' ) ;
70
91
req = this . _activeChannels [ message . channel ] ;
71
92
if ( req ) {
72
93
try {
73
- if ( message . data instanceof Object ) {
74
- message . data = Buffer . from ( message . data ) ;
75
- }
76
- console . log ( ` :> ${ checksum ( message . data ) } ]` ) ;
94
+ detail_info ( ` :> ` ) ;
77
95
req . write ( message . data ) ;
78
96
} catch ( err ) {
79
97
console . log ( 'data is object' , message ) ;
@@ -84,6 +102,7 @@ class RequestForwarder extends Object {
84
102
}
85
103
break ;
86
104
case 'end' :
105
+ this . setState ( '> end' ) ;
87
106
req = this . _activeChannels [ message . channel ] ;
88
107
if ( req ) {
89
108
req . end ( ) ;
@@ -128,9 +147,9 @@ class WathDog extends Object {
128
147
}
129
148
130
149
tick ( ) {
131
- console . log ( '\n' ) ;
132
- console . log ( this . requestForwarder . _activeChannels ) ;
133
- console . log ( '\n' ) ;
150
+ detail_info ( '\n' ) ;
151
+ detail_info ( this . requestForwarder . _activeChannels ) ;
152
+ detail_info ( '\n' ) ;
134
153
process
135
154
}
136
155
}
0 commit comments