code: function(id, socket) {
    EventEmitter.call(this);
    this.id = id;
    this.socket = socket;
  
    if(!socket._socket) {
      this.remoteAddress = {
        ip: socket.address().address,
        port: socket.address().port
      };
    } else {
      this.remoteAddress = {
        ip: socket._socket.remoteAddress,
        port: socket._socket.remotePort
      };
    }
  
    var self = this;
  
    socket.once('close', this.emit.bind(this, 'disconnect'));
    socket.on('error', this.emit.bind(this, 'error'));
  
    socket.on('message', function(msg) {
      if(msg) {
        msg = Package.decode(msg);
        handler(self, msg);
      }
    });
  
    this.state = ST_INITED;
  
    // TODO: any other events?
  }
docs: Socket class that wraps socket and websocket to provide unified interface for up level.