public bool PutHandler(MemBlock key, MemBlock value, int ttl, bool unique) {
DateTime create_time = DateTime.UtcNow;
DateTime end_time = create_time.AddSeconds(ttl);
lock(_sync) {
_data.DeleteExpired(key);
LinkedList<Entry> data = _data.GetEntries(key);
if(data != null) {
foreach(Entry ent in data) {
if(ent.Value.Equals(value)) {
if(end_time > ent.EndTime) {
_data.UpdateEntry(ent.Key, ent.Value, end_time);
}
return true;
}
}
// If this is a create we didn't find an previous entry, so failure, else add it
if(unique) {
throw new Exception("ENTRY_ALREADY_EXISTS");
}
}
// This is either a new key or a new value (put only)
Entry e = new Entry(key, value, create_time, end_time);
_data.AddEntry(e);
} // end of lock
return true;
}