public void AddFile(FileSegment segment, CancellationToken cancellationToken, IProgressHandler progress) { string name = segment.Name; string path = segment.Path; Guard.IsNotNullOrEmpty(name, nameof(name)); Guard.IsNotNullOrEmpty(path, nameof(path)); stream.Write(StreamKind.FS_CODE); stream.Write(2 * name.Length); for (int n = 0; n < name.Length; n++) { stream.Write(name[n]); } IStreamPosition sizePosition = stream.SavePosition(); stream.Write(0L); using (FileEncodingInputStream fileStream = new FileEncodingInputStream(path, platform)) { long sequenceLength = encoder.Encode(fileStream, stream, encodingToken, cancellationToken, progress); LayoutStreamInMemory(sequenceLength); IStreamPosition endPosition = stream.SavePosition(); stream.RestorePosition(sizePosition); stream.Write(sequenceLength); stream.RestorePosition(endPosition); } }
public void SaveRestorePositionTest1() { MemoryStream memoryStream = new MemoryStream(); using (FileEncodingOutputStream stream = CreateFileEncodingOutputStream(memoryStream)) { IStreamPosition position = stream.SavePosition(); Assert.IsNotNull(position); stream.RestorePosition(position); WriteBitString(stream, "11111111"); Assert.AreEqual(new byte[] { 0xFF }, memoryStream.ToArray()); } }
public async Task SubscribeToStreams(IStreamPosition streamPosition, params SubscriptionInfo[] eventTypes) { var methods = new Dictionary <string, Func <IStreamSubscription, ResolvedEvent, CancellationToken, Task> >(); var prefixes = eventTypes.Select(x => x.EventType.Name).ToArray(); var filter = EventTypeFilter.Prefix(prefixes); FilterOptions filterOptions = new FilterOptions(filter); var esStreamPosition = ((StreamPosition)(streamPosition)).GlobalPosition; var handlers = eventTypes.ToDictionary(x => x.EventType.Name, x => x.HandlerType); var dict = eventTypes.Select(x => x.EventType).ToDictionary(x => x.Name); await _connection.SubscribeToAllAsync(esStreamPosition, async (s, r, c) => { await OnEventAppearead(s, r, methods, handlers, dict, c); }, true, OnDropped, filterOptions); }
public async Task <EventStreamSlice> GetAllEventsBackwardsAsync(IStreamPosition position = null, int?maxCount = null) { var rows = crudRepository.FindAll <EventStreamRow>(); rows = rows.OrderByDescending(x => x.GlobalSequenceNumber); if (position != null) { GlobalEventStreamPosition globalPosition = position as GlobalEventStreamPosition; if (globalPosition == null) { throw new ArgumentException("Invalid IStreamPosition handle passed to EventStore.GetAllEventsBackwardsAsync"); } rows = rows.Where(x => x.GlobalSequenceNumber < globalPosition.LastGlobalSequenceNumberRead); } if (maxCount != null) { rows = rows.Take(maxCount.Value); } var eventRows = await rows.ToListAsync(crudRepository); var events = Enumerable.Range(1, eventRows.Count) .Select(i => eventRows[eventRows.Count - i]) //reverse order - despite reading from the end, we still want events to be in oldest-to-newest order .Select(SelectEventRecordFromRow) .ToList(); IStreamPosition newPosition = null; if (maxCount == 0) { newPosition = position; } else if (events.Count > 0 && events[0].StreamSequenceNumber > 1) { newPosition = new GlobalEventStreamPosition(events[0].StreamSequenceNumber); } EventStreamSlice slice = new EventStreamSlice(events, newPosition); return(slice); }
public void SaveRestorePositionTest2() { MemoryStream memoryStream = new MemoryStream(); using (FileEncodingOutputStream stream = CreateFileEncodingOutputStream(memoryStream)) { IStreamPosition p1 = stream.SavePosition(); WriteBitString(stream, "11111111"); IStreamPosition p2 = stream.SavePosition(); WriteBitString(stream, "00000000"); IStreamPosition p3 = stream.SavePosition(); WriteBitString(stream, "11111111"); IStreamPosition p4 = stream.SavePosition(); stream.RestorePosition(p2); WriteBitString(stream, "10010110"); stream.RestorePosition(p1); WriteBitString(stream, "10011001"); stream.RestorePosition(p4); WriteBitString(stream, "00000001"); stream.RestorePosition(p3); WriteBitString(stream, "00001111"); Assert.AreEqual(new byte[] { 0x99, 0x69, 0xF0, 0x80 }, memoryStream.ToArray()); } }
void IEncodingOutputStream.RestorePosition(IStreamPosition position) { index = ((StreamPosition)position).Index; }
public void RestorePosition(IStreamPosition position) { Guard.IsNotNull(position, nameof(position)); fileStream.Position = ((StreamPosition)position).Position; }
public EventStreamSlice(IEnumerable <IEventStoreRecord> events, IStreamPosition nextPosition) { Events = events; NextPosition = nextPosition; }