IMB3.TEventEntry.SignalStream C# (CSharp) Method

SignalStream() public method

public SignalStream ( string aStreamName, Stream aStream ) : int
aStreamName string
aStream Stream
return int
        public int SignalStream(string aStreamName, Stream aStream) {
            var payload = new TByteBuffer();
            if (!IsPublished && connection.AutoPublish)
                Publish();
            if (IsPublished) {
                // ekStreamHeader, includes stream name, no stream data
                var streamNameUtf8 = Encoding.UTF8.GetBytes(aStreamName);
                var streamID = connection.getConnectionHashCode(streamNameUtf8);
                payload.Prepare(ID);
                payload.Prepare((Int32) 0); // tick
                payload.Prepare((Int32) TEventKind.ekStreamHeader); // event kind
                payload.Prepare(streamID);
                payload.Prepare(aStreamName);
                payload.PrepareApply();
                payload.QWrite(ID);
                payload.QWrite((Int32) 0); // tick
                var eventKindIndex = payload.WriteCursor;
                payload.QWrite((Int32) TEventKind.ekStreamHeader); // event kind
                payload.QWrite(streamID);
                var bodyIndex = payload.WriteCursor;
                payload.QWrite(aStreamName);
                var res = connection.WriteCommand(TConnectionPlatform.TCommands.icEvent, payload.Buffer);
                if (res > 0) {
                    // ekStreamBody, only buffer size chunks of data
                    // prepare Payload to same value but aStreamName stripped
                    // fixup event kind
                    payload.WriteStart(eventKindIndex);
                    payload.QWrite((Int32) TEventKind.ekStreamBody);
                    payload.WriteStart(bodyIndex);
                    // prepare room for body data
                    payload.PrepareStart();
                    payload.PrepareSize(TConnection.MaxStreamBodyBuffer);
                    payload.PrepareApply();
                    // write pointer in ByteBuffer is still at beginning of stream read buffer!
                    // but buffer is already created on correct length
                    Int32 readSize;
                    do {
                        readSize = ReadBytesFromStream(payload, aStream);
                        //ReadSize = aStream.Read(Payload.Buffer, BodyIndex, Connection.MaxStreamBodyBuffer);
                        if (readSize == TConnection.MaxStreamBodyBuffer)
                            res = connection.WriteCommand(TConnectionPlatform.TCommands.icEvent, payload.Buffer);
                        // reset write position
                        payload.WriteStart(bodyIndex);
                    } while ((readSize == TConnection.MaxStreamBodyBuffer) && (res > 0));
                    if (res > 0) {
                        // clip ByteBuffer to bytes read from stream
                        // write pointer in ByteBuffer is still at beginning of stream read buffer!
                        payload.PrepareStart();
                        payload.PrepareSize(readSize);
                        payload.PrepareApplyAndTrim();
                        // fixup event kind
                        payload.WriteStart(eventKindIndex);
                        payload.QWrite((Int32) TEventKind.ekStreamTail);
                        res = connection.WriteCommand(TConnectionPlatform.TCommands.icEvent, payload.Buffer);
                    }
                }
                return res;
            }
            else
                return TConnection.iceNotEventPublished;
        }