UNPKG

netsoul

Version:

netsoul protocol library

119 lines (97 loc) 3.32 kB
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