import 'package:pip_services3_commons/pip_services3_commons.dart';
import 'package:pip_services3_components/pip_services3_components.dart';
class MyComponent implements IReferenceable {
late ICache _cache;
late MemoryLock _lock;
@override
void setReferences(IReferences references) {
_cache =
references.getOneRequired(Descriptor('*', 'cache', '*', '*', '1.0'));
_lock = references.getOneRequired(Descriptor('*', 'lock', '*', '*', '1.0'));
}
Future<void> storeResult(String? correlationId, String param1) async {
// Lock
await _lock.acquireLock(correlationId, 'mykey', 1000, 1000);
var config = ConfigParams.fromTuples(['retry_timeout', 200]);
_lock.configure(config);
// Do processing
// ...
print('The stored value is ' + param1);
// Store result to cache async
await _cache.store(correlationId, 'mykey', param1, 3600000);
// Release lock async
await _lock.releaseLock(correlationId, 'mykey');
}
Future<String> obtainResult(String? correlationId) async {
// Lock..
await _lock.acquireLock(correlationId, 'mykey', 1000, 1000);
// Do processing
// ...
var result = await _cache.retrieve(correlationId, 'mykey') as String;
// Release lock async
await _lock.releaseLock(correlationId, 'mykey');
return result;
}
}
// Use the component
var my_component = MyComponent();
my_component.setReferences(References.fromTuples([
Descriptor('pip-services', 'cache', 'memory', 'default', '1.0'),
MemoryCache(),
Descriptor('pip-services', 'lock', 'memory', 'default', '1.0'),
MemoryLock()
]));
await my_component.storeResult(null, 'param1');
var result = await my_component.obtainResult(null);
print('The retrieved value is ' + result);