private void HandleStreamEvent(TEventKind aEventKind, TByteBuffer aPayload) {
Int32 streamID;
string streamName;
Stream stream;
switch (aEventKind) {
case TEventKind.ekStreamHeader:
if (OnStreamCreate != null) {
aPayload.Read(out streamID);
aPayload.Read(out streamName);
stream = OnStreamCreate(this, streamName);
if (stream != null)
FStreamCache.Cache(streamID, stream, streamName);
}
break;
case TEventKind.ekStreamBody:
aPayload.Read(out streamID);
stream = FStreamCache.Find(streamID, out streamName);
if (stream != null)
stream.Write(aPayload.Buffer, aPayload.ReadCursor, aPayload.ReadAvailable);
break;
case TEventKind.ekStreamTail:
aPayload.Read(out streamID);
stream = FStreamCache.Find(streamID, out streamName);
if (stream != null) {
stream.Write(aPayload.Buffer, aPayload.ReadCursor, aPayload.ReadAvailable);
if (OnStreamEnd != null)
OnStreamEnd(this, ref stream, streamName);
stream.Close();
FStreamCache.Remove(streamID);
}
break;
}
}