public Warehouse RetrieveWarehouse(long timestamp) { FindCommand.Parameters["@time"].Value = timestamp; var result = FindCommand.ExecuteReader(); if (!result.Read()) { result.Close(); return(null); } var scope = result["scope"] as byte[]; result.Close(); if (scope == null) { return(null); } // Decompress the binary data byte[] data; using (var inputStream = new MemoryStream(scope)) using (var zlibStream = new GZipInputStream(inputStream)) using (var outputStream = new MemoryStream()) { zlibStream.CopyTo(outputStream); data = outputStream.ToArray(); } var warehouse = new Warehouse(); var fromProtobuf = new FromProtobuf(warehouse); lock (_lock) { foreach (var stringDeclaration in StringDeclarations) { fromProtobuf.StringDeclarations [stringDeclaration.Value] = stringDeclaration.Key; } } fromProtobuf.Convert(data); return(warehouse); }
public BroadcastService(Channel channel, object uglyLock, bool strictServer) { LiveWarehouse = channel.Warehouse; TimeMachine = channel.TimeMachine; _strictServer = strictServer; _channel = channel; _protoModelObserver = channel.Observer; _toProtobuf = new ToProtobuf(); _fromProtobuf = new FromProtobuf(LiveWarehouse); _lock = uglyLock; CurrentWarehouse = null; _currentProtoModelObserver = new ProtoModelObserver(); channel.RegisterService(this); }