147 lines
3.6 KiB
C#
147 lines
3.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Collections.Concurrent;
|
|
|
|
namespace HPSocketCS
|
|
{
|
|
public class Extra<T>
|
|
{
|
|
ConcurrentDictionary<IntPtr, T> dict = new ConcurrentDictionary<IntPtr, T>();
|
|
|
|
/// <summary>
|
|
/// 获取附加数据
|
|
/// </summary>
|
|
/// <param name="key"></param>
|
|
/// <returns></returns>
|
|
public T Get(IntPtr key)
|
|
{
|
|
T value;
|
|
if (dict.TryGetValue(key, out value))
|
|
{
|
|
return value;
|
|
}
|
|
return default(T);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置附加数据
|
|
///
|
|
/// </summary>
|
|
/// <param name="key"></param>
|
|
/// <param name="newValue"></param>
|
|
/// <returns></returns>
|
|
public bool Set(IntPtr key, T newValue)
|
|
{
|
|
try
|
|
{
|
|
dict.AddOrUpdate(key, newValue, (tKey, existingVal) => { return newValue; });
|
|
return true;
|
|
}
|
|
catch (OverflowException)
|
|
{
|
|
// 字典数目超过int.max
|
|
return false;
|
|
}
|
|
catch (ArgumentNullException)
|
|
{
|
|
// 参数为空
|
|
return false;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 删除附加数据
|
|
/// </summary>
|
|
/// <param name="key"></param>
|
|
/// <returns></returns>
|
|
public bool Remove(IntPtr key)
|
|
{
|
|
T value;
|
|
return dict.TryRemove(key, out value);
|
|
}
|
|
}
|
|
|
|
|
|
public class ConnectionExtra
|
|
{
|
|
ConcurrentDictionary<IntPtr, object> dict = new ConcurrentDictionary<IntPtr, object>();
|
|
|
|
/// <summary>
|
|
/// 获取附加数据
|
|
/// </summary>
|
|
/// <param name="key"></param>
|
|
/// <returns></returns>
|
|
public object GetExtra(IntPtr key)
|
|
{
|
|
object value;
|
|
if (dict.TryGetValue(key, out value))
|
|
{
|
|
return value;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取附加数据
|
|
/// </summary>
|
|
/// <param name="key"></param>
|
|
/// <returns></returns>
|
|
public T GetExtra<T>(IntPtr key)
|
|
{
|
|
object value;
|
|
if (dict.TryGetValue(key, out value))
|
|
{
|
|
return (T)value;
|
|
}
|
|
return default(T);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置附加数据
|
|
///
|
|
/// </summary>
|
|
/// <param name="key"></param>
|
|
/// <param name="value"></param>
|
|
/// <returns></returns>
|
|
public bool SetExtra(IntPtr key, object newValue)
|
|
{
|
|
try
|
|
{
|
|
dict.AddOrUpdate(key, newValue, (tKey, existingVal) => { return newValue; });
|
|
return true;
|
|
}
|
|
catch (OverflowException)
|
|
{
|
|
// 字典数目超过int.max
|
|
return false;
|
|
}
|
|
catch (ArgumentNullException)
|
|
{
|
|
// 参数为空
|
|
return false;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 删除附加数据
|
|
/// </summary>
|
|
/// <param name="key"></param>
|
|
/// <returns></returns>
|
|
public bool RemoveExtra(IntPtr key)
|
|
{
|
|
object value;
|
|
return dict.TryRemove(key, out value);
|
|
}
|
|
}
|
|
}
|