text: 'use strict';
  var EventEmitter = require('events').EventEmitter;
  var util = require('util');
  var utils = require('../../util/utils');
  var TcpSocket = require('./tcpsocket');
  
  var ST_STARTED = 1;
  var ST_CLOSED = 2;
  
  // private protocol, no need exports
  var HEAD_SIZE = 4;
  
  /**
   * websocket protocol processor
   */
  var Processor = function(closeMethod) {
    EventEmitter.call(this);
    this.closeMethod = closeMethod;
    this.state = ST_STARTED;
  };
  util.inherits(Processor, EventEmitter);
  
  module.exports = Processor;
  
  Processor.prototype.add = function(socket, data) {
    if(this.state !== ST_STARTED) {
      return;
    }
    var tcpsocket = new TcpSocket(socket, {headSize: HEAD_SIZE,
                                           headHandler: utils.headHandler,
                                           closeMethod: this.closeMethod});
    this.emit('connection', tcpsocket);
    socket.emit('data', data);
  };
  
  Processor.prototype.close = function() {
    if(this.state !== ST_STARTED) {
      return;
    }
    this.state = ST_CLOSED;
  };