|
|
|
|
using System.Collections.Concurrent;
|
|
|
|
|
|
|
|
|
|
namespace HybirdFrameworkDriver.Common;
|
|
|
|
|
|
|
|
|
|
public class MsgCache<T, TReq, TResp>
|
|
|
|
|
{
|
|
|
|
|
private readonly ConcurrentDictionary<string, MsgPair<TReq, TResp>> _dictionary = new();
|
|
|
|
|
private static readonly string MsgKey = "msg_";
|
|
|
|
|
|
|
|
|
|
public void Add(string key, dynamic value)
|
|
|
|
|
{
|
|
|
|
|
_dictionary[key] = value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool TryGet(string key, out MsgPair<TReq, TResp>? value)
|
|
|
|
|
{
|
|
|
|
|
return _dictionary.TryGetValue(key, out value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Remove(string key)
|
|
|
|
|
{
|
|
|
|
|
_dictionary.Remove(key, out var value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void AddByMsgId(int key, MsgPair<TReq, TResp> value)
|
|
|
|
|
{
|
|
|
|
|
_dictionary[MsgKey + key] = value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool TryGetMsgId(int key, out MsgPair<TReq, TResp>? value)
|
|
|
|
|
{
|
|
|
|
|
return _dictionary.TryGetValue(MsgKey + key, out value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void RemoveMsgId(int key)
|
|
|
|
|
{
|
|
|
|
|
_dictionary.Remove(MsgKey + key, out var value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class MsgPair<TReq, TResp>
|
|
|
|
|
{
|
|
|
|
|
public TReq? Req { get; set; }
|
|
|
|
|
public TResp? Resp { get; set; }
|
|
|
|
|
}
|