Co-locate the two cockpit-pod projects into a single repository:
- Console/ : TeslaConsole, the net48 WinForms operator console (decompiled
reconstruction) plus its differential + catalog test suite.
- Launcher/ : TeslaLauncher, the net6 pod-side Service + Agent rewrite.
Adds a combined TeslaSuite.sln, root README documenting the shared wire
contract (and its current duplication, the main follow-up), and a root
.gitignore. Histories were not preserved per request; this is a fresh start
from the current working state of both projects.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
44 lines
655 B
C#
44 lines
655 B
C#
using System;
|
|
|
|
namespace TeslaConsole;
|
|
|
|
internal class Cached<T> where T : class
|
|
{
|
|
private T mItem;
|
|
|
|
private DateTime mNextExpireTime;
|
|
|
|
private TimeSpan mCacheDuration;
|
|
|
|
private object mSyncRoot = new object();
|
|
|
|
public T Item
|
|
{
|
|
get
|
|
{
|
|
return mItem;
|
|
}
|
|
set
|
|
{
|
|
mItem = value;
|
|
mNextExpireTime = DateTime.Now + mCacheDuration;
|
|
}
|
|
}
|
|
|
|
public bool IsExpired => DateTime.Now > mNextExpireTime;
|
|
|
|
public object SyncRoot => mSyncRoot;
|
|
|
|
public Cached(TimeSpan cacheDuration)
|
|
{
|
|
mItem = null;
|
|
mNextExpireTime = DateTime.MinValue;
|
|
mCacheDuration = cacheDuration;
|
|
}
|
|
|
|
public void Expire()
|
|
{
|
|
mNextExpireTime = DateTime.MinValue;
|
|
}
|
|
}
|