public bool ProcessEvent(
     string partition, CheckpointTag eventPosition, string streamId, string eventType, string category, Guid eventid,
     int sequenceNumber, string metadata, string data, out string newState, out EmittedEvent[] emittedEvents)
 {
     CheckDisposed();
     if (eventType == null)
         throw new ArgumentNullException("eventType");
     if (streamId == null)
         throw new ArgumentNullException("streamId");
     _eventPosition = eventPosition;
     _emittedEvents = null;
     _query.Push(
         data.Trim(), // trimming data passed to a JS 
         new[]
             {
                 streamId, eventType, category ?? "", sequenceNumber.ToString(CultureInfo.InvariantCulture),
                 metadata ?? "", partition, eventPosition.ToJson()
             });
     newState = _query.GetState();
     emittedEvents = _emittedEvents == null ? null : _emittedEvents.ToArray();
     return true;
 }
 public string GetStatePartition(
     CheckpointTag eventPosition, string streamId, string eventType, string category, Guid eventid,
     int sequenceNumber, string metadata, string data)
 {
     CheckDisposed();
     if (eventType == null)
         throw new ArgumentNullException("eventType");
     if (streamId == null)
         throw new ArgumentNullException("streamId");
     var partition = _query.GetPartition(
         data.Trim(), // trimming data passed to a JS 
         new string[] { streamId, eventType, category ?? "", sequenceNumber.ToString(CultureInfo.InvariantCulture), metadata ?? "", eventPosition.ToJson() });
     if (partition == "")
         return null;
     else 
         return partition;
 }