55 * Please refer to the JS docs for more information:
66 * https://github.com/Limitless-TCP/LimitlessTCP-JavaScript/blob/master/README.md
77 */
8-
8+
99const net = require ( 'net' ) ;
10- const pako = require ( 'pako' ) ;
1110const crypto = require ( 'crypto' ) ;
1211
1312class TCPClient {
14- constructor ( address , port , useHeartbeat ) {
13+
14+ //TODO Add this settings object instead of useHearbeat
15+ constructor ( address , port ) {
1516
1617 this . isServerAnInstance = false ;
18+
1719 this . useHeartbeat = false ;
18- if ( useHeartbeat === null ) {
19- this . useHeartbeatSetting = false ;
20- } else {
21- this . useHeartbeatSetting = useHeartbeat ;
22- }
20+ this . useCompression = false ;
21+ this . useChunking = false ;
2322
2423 this . port = port ;
2524 this . address = address ;
2625
2726 this . socket = new net . Socket ;
28-
29-
30- //this.socket.emit('error', new TCPServiceError('Heartbeat Timeout', 'ERRCONHBT'));
3127 }
3228
33- connect ( ) {
34- this . socket . connect ( this . port , this . address , ( ) => {
29+ connect ( callback ) {
30+ this . socket . connect ( this . port , this . address , cb => {
31+ if ( callback !== null ) {
32+ callback ( cb ) ;
33+ }
34+
3535 this . localAddress = this . socket . address ( ) . address ;
3636 this . localPort = this . socket . address ( ) . port ;
3737
@@ -49,12 +49,21 @@ class TCPClient {
4949 break ;
5050
5151 case 'tcpsjs-connect' :
52- if ( this . useHeartbeatSetting ) {
52+ this . isServerAnInstance = true ;
53+
54+ if ( packet . data . useHeartbeat ) {
5355 this . useHeartbeat = true ;
5456 this . startHeartbeat ( ) ;
5557 this . lastHeartbeat = Date . now ( ) ;
58+ }
5659
57- this . isServerAnInstance = true ;
60+ if ( packet . data . useCompression ) {
61+ this . pako = require ( 'pako' ) ;
62+ this . useCompression = true ;
63+ }
64+
65+ if ( packet . data . useChunking ) {
66+ this . useChunking = true ;
5867 }
5968 break ;
6069 }
@@ -86,8 +95,14 @@ class TCPClient {
8695 try {
8796 data = JSON . stringify ( data ) ;
8897 } catch ( e ) { }
98+
8999 if ( this . isServerAnInstance ) {
90- this . socket . write ( JSON . stringify ( { type : 'tcpsjs-packet' , data : Buffer . from ( pako . deflate ( data ) ) } ) + '<PacketSplitter>' ) ;
100+ if ( this . useCompression ) {
101+ this . socket . write ( JSON . stringify ( { type : 'tcpsjs-packet' , data : Buffer . from ( pako . deflate ( data ) ) } ) + '<PacketSplitter>' ) ;
102+ } else {
103+ this . socket . write ( JSON . stringify ( { type : 'tcpsjs-packet' , data : data } ) + '<PacketSplitter>' ) ;
104+ }
105+
91106 } else {
92107 this . socket . write ( data ) ;
93108 }
@@ -121,7 +136,13 @@ class TCPClient {
121136 packet = JSON . parse ( packet ) ;
122137 if ( packet . type === 'tcpsjs-packet' ) {
123138
124- let packetData = Buffer . from ( pako . inflate ( new Uint8Array ( Buffer . from ( packet . data . data ) ) ) ) . toString ( ) ;
139+ let packetData ;
140+
141+ if ( this . useCompression ) {
142+ packetData = Buffer . from ( pako . inflate ( new Uint8Array ( Buffer . from ( packet . data . data ) ) ) ) . toString ( ) ;
143+ } else {
144+ packetData = packet . data . toString ( ) ;
145+ }
125146
126147 try { //Try to parse, if error it isn't a json
127148 packetData = JSON . parse ( packetData )
@@ -175,25 +196,58 @@ class TCPClient {
175196
176197
177198class TCPServer {
178- constructor ( port , useHeartbeat ) {
179- this . port = port ;
180-
181- this . connectedSockets = [ ] ;
182- this . allSockets = [ ] ;
183199
184- this . server = net . createServer ( ) ;
200+ /**
201+ * @param settings = { //If null, set to true (If server is instance of LimitlessTCP)
202+ * heartbeat: bool,
203+ * compression: bool, //Only import the compression library if this is true
204+ * chunking: bool //Coming soon
205+ * }
206+ */
207+ constructor ( port , settings ) {
208+ this . port = port ;
185209
186- if ( useHeartbeat === null ) {
210+ if ( settings === null ) {
187211 this . useHeartbeat = false ;
212+ this . useCompression = false ;
213+ this . useChunking = false ;
214+ } else {
215+ if ( settings . useHeartbeat !== undefined ) {
216+ this . useHeartbeat = settings . useHeartbeat ;
217+ } else {
218+ this . useHeartbeat = true ;
219+ }
188220
221+ if ( settings . useCompression !== undefined ) {
222+ this . useCompression = settings . useCompression ;
189223
190- } else {
191- this . useHeartbeat = useHeartbeat ;
224+ if ( settings . useCompression ) { //Load in compression library if enabled
225+ this . pako = require ( 'pako' ) ;
226+ }
227+ } else {
228+ this . useCompression = true ;
229+ this . pako = require ( 'pako' ) ;
230+ }
231+
232+ if ( settings . useChunking !== undefined ) {
233+ this . useChunking = settings . useChunking ;
234+ } else {
235+ this . useChunking = true ;
236+ }
192237 }
238+
239+ this . connectedSockets = [ ] ;
240+ this . allSockets = [ ] ;
241+
242+ this . server = net . createServer ( ) ;
193243 }
194244
195- listen ( ) {
196- this . server . listen ( this . port , ( ) => {
245+ listen ( callback ) {
246+ this . server . listen ( this . port , cb => {
247+ if ( callback !== null ) {
248+ callback ( cb ) ;
249+ }
250+
197251 if ( this . useHeartbeat ) {
198252 this . startHeartbeat ( ) ;
199253 }
@@ -205,7 +259,7 @@ class TCPServer {
205259 this . connectedSockets . push ( socket ) ;
206260 this . allSockets . push ( socket ) ;
207261
208- socket . write ( JSON . stringify ( { type : 'tcpsjs-connect' } ) )
262+ socket . write ( JSON . stringify ( { type : 'tcpsjs-connect' , data : { useHeartbeat : this . useHeartbeat , useCompression : this . useCompression , useChunking : this . useChunking } } ) )
209263
210264 if ( this . useHeartbeat ) {
211265 socket . lastHeartbeat = Date . now ( ) ;
@@ -259,7 +313,11 @@ class TCPServer {
259313 data = JSON . stringify ( data ) ;
260314 } catch ( e ) { }
261315
262- socket . write ( JSON . stringify ( { type : 'tcpsjs-packet' , data : Buffer . from ( pako . deflate ( data ) ) } ) + '<PacketSplitter>' ) ;
316+ if ( this . useCompression ) {
317+ socket . write ( JSON . stringify ( { type : 'tcpsjs-packet' , data : Buffer . from ( pako . deflate ( data ) ) } ) + '<PacketSplitter>' ) ;
318+ } else {
319+ socket . write ( JSON . stringify ( { type : 'tcpsjs-packet' , data : data } ) + '<PacketSplitter>' ) ;
320+ }
263321 }
264322
265323 on ( event , socket , callback ) {
@@ -303,7 +361,13 @@ class TCPServer {
303361 packet = JSON . parse ( packet ) ;
304362 if ( packet . type === 'tcpsjs-packet' ) {
305363
306- let packetData = Buffer . from ( pako . inflate ( new Uint8Array ( Buffer . from ( packet . data . data ) ) ) ) . toString ( ) ;
364+ let packetData ;
365+
366+ if ( this . useCompression ) {
367+ packetData = Buffer . from ( pako . inflate ( new Uint8Array ( Buffer . from ( packet . data . data ) ) ) ) . toString ( ) ;
368+ } else {
369+ packetData = packet . data . toString ( ) ;
370+ }
307371
308372 try { //Try to parse, if error it isn't a json
309373 packetData = JSON . parse ( packetData )
0 commit comments