connects.coffee | |
|---|---|
protocol = require './protocol'
utils = require './utils'
class ConnectBase extends utils.PubSub
constructor: (@options = {}) ->
@connected = false
do @handleOptions
@debug 'ConnectBase::constructor'
super @options
debug: (args...) =>
@options.logFn "#{@constructor.name}> ", args... if @options.debug
verbose: (args...) =>
@options.logFn "#{@constructor.name}> ", args... if @options.verbose
handleOptions: =>
@options.logFn ?= console.log
@options.verbose ?= false
@options.debug ?= false
@debug 'handleOptions'
connect: =>
if not @socket?
throw new Error 'socket does not exists' | |
| classes using lib net | class ConnectNet extends ConnectBase
connect: =>
@debug "ConnectNet::connect"
super
@socket.on 'connect', @onConnect
@socket.on 'data', @onBuffer
@socket.on 'end', @onDisconnect
@socket.on 'error', @onError
@socket.on 'close', @onClose
send: (message, encoding = null, callback = null) =>
if typeof(message) is 'string'
data = "#{message}\r\n"
else
data = message.join(" ") + "\r\n"
@socket.write data, encoding, callback
disconnect: =>
do @socket.end
do @onDisconnect |
| Net callbacks | onConnect: =>
@connected = true
@debug "ConnectNet::onConnect"
@emit 'connect'
onBuffer: (buffer) =>
@debug 'ConnectNet::onBuffer', buffer
@emit 'buffer', buffer
@handleLine line for line in buffer.toString().split("\n")
handleLine: (line) =>
line = line.replace /^\s+|\s+$/g, ""
return false if not line.length
@debug 'ConnectNet::handleLine', line
message = protocol::parseData line
@debug 'protocol::parseData', message
@emit 'data', line
@emit 'message', message
onDisconnect: =>
@debug "ConnectNet::onDisconnect"
@connected = false
@emit 'disconnect'
onClose: =>
@debug "ConnectNet::onClose"
@connected = false
@emit 'disconnect'
onError: (error) =>
@debug "ConnectNet::onError", error
@emit 'error', error
class ConnectTCP extends ConnectNet
handleOptions: =>
super
@options.host ?= 'ns-server.epitech.net'
@options.port ?= 4242
@options.localAddress ?= '0.0.0.0'
connect: =>
@debug "ConnectTCP::connect"
@verbose "Connecting to #{@options.host}:#{@options.port}..."
@socket = require('net').connect
port: @options.port
host: @options.host
localAddress: @options.localAddress
super
class ConnectUnixSocket extends ConnectNet
handleOptions: =>
super
if not @options.path?
throw new Error 'unix socket not specified'
connect: =>
@debug "ConnectUnixSocket::connect"
@verbose "Connecting to #{@options.path}..."
@socket = require('net').connect
path: @options.path
super
module.exports =
unixSocket: ConnectUnixSocket
tcp: ConnectTCP
net: ConnectNet
base: ConnectBase
|