code: function Event (data, conn, token) {
  
  	// internal id
  	this.id = UTIL.createUUID();
  
  	// store connection object
  	this.conn = conn;
  	
  	// incoming data
  	this.data = data;
  
  	// flags to indicate current status of Event
  	this.checkin = false;
  
  	// create session token and create/load session values
  	// NOTE: do not use 'port' as part of token generation, as port can change during repeated HTTP requests
  	// NOTE: if 'conn.host' is used, for some clients, their IP might change from request to request (due to load balancer)
  	// then session will break
  	//this.conn.session_token = new Buffer(token + conn.host).toString('base64').substring(0,150);	
  	// TODO: review potential security vulunarabilility here
  	token = token || '';
  	this.conn.session_token = new Buffer(token).toString('base64').substring(0,150);
  	
  	// need to de-allocate the sessions when no longer used
  	// TODO: set expire time?
   	this.session = SR.State.get(this.conn.session_token);
  	
  	// record client id (if available)
  	// NOTE: this id will be sent back as a '_cid' attribute in the response for this event
  	//         when the event is checkout, this is to ensure that
  	//         there's a unique response to each unqiue event
  	// TODO: simplify this? combine with forwardEvent in SR.RPC?
  
  	if (data.hasOwnProperty('_cid'))
   		this.cid = data._cid;
  }
docs: a Event object, for each incoming packet/request, we turn it into a Event (with 'socket' and 'data') awaiting processing by Event handlers