Finn Fitzsimons
Finn Fitzsimons

Reputation: 324

NodeJS (coffeescript): TCP socket only writing intermittently

I am having trouble setting up a simple a simple server using the net module in nodejs that keeps each tcp socket open once connected, reads data from the socket and replies/writes data back to the socket after each line of text is received.

I am receiving all data lines/chunks/requests and for each one I write a response string to the socket. However, only some of the written responses are being received by the client.

Below is my simplified code for the server:

net = require('net')

server = net.createServer()
nl = String.fromCharCode(10)

server.on('connection', (socket) ->
  console.log('net server connection')

  handle = (data, next) ->
    if data.toString().indexOf('@COMMAND;') > -1
      console.log("sending: #{"@NONE\n"}")
      socket.write("@NONE#{nl}", next)
    else
      console.log("sending: MF;OK;9999-9999")
      socket.write("MF;OK;9999-9999#{nl}", next)

  socket.on('end', () ->
    console.log('client disconnected')
  )

  socket.on('data', (data) ->
    console.log("recieved: #{data}")
    console.log("pausing")
    socket.pause()
    handle(data, () ->
      socket.resume()
      console.log("resuming")
    )
  )

  socket.on('error', (err) ->
    winston.error("socket error: ", err)
  )
)

server.on('listening', () -> console.log('net server listening'))
server.on('error', (err) -> console.log('net server error', err))
server.on('close', (err) -> console.log('net server close'))
server.listen(8888)

The client I do not have control over but has been tested to be working fine.

This is the desired output:

TX: @TR;MF;1234;3;1;1;999999;12345;#
RX: MF;OK;9999-9999
TX: @TR;MF;1235;2;1;11111;22222;33333;44444;1;2;13579;30.23;1090.23;0;1;12345;#
RX: MF;OK;9999-9999
TX: @COMMAND;12345
RX: @NONE

And this is the actual output: (You'll notice line 4 is missing).

TX: @TR;MF;1234;3;1;1;999999;12345;#
RX: MF;OK;9999-9999

TX: @TR;MF;1235;2;1;11111;22222;33333;44444;1;2;13579;30.23;1090.23;0;1;12345;#
TX: @COMMAND;12345
RX: @NONE

And here is the console.log output in the terminal:

net server connection
recieved: @TR;MF;1234;3;1;1;999999;12345;#
pausing
sending: MF;OK;9999-9999
resuming
recieved: @TR;MF;1235;2;1;11111;22222;33333;44444;1;2;13579;30.23;1090.23;0;1;12345;#
pausing
sending: MF;OK;9999-9999
resuming
recieved: @COMMAND;12345
pausing
sending: @NONE

Where am I going wrong!? Thanks in advance

Upvotes: 0

Views: 133

Answers (1)

Finn Fitzsimons
Finn Fitzsimons

Reputation: 324

There was nothing wrong with my code. The problem was on the client side. So need need for answers. Thanks

Upvotes: 0

Related Questions