You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
192 lines
5.4 KiB
192 lines
5.4 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using ProtoCSStruct;
|
|
using Sog;
|
|
using Sog.Data;
|
|
|
|
namespace World
|
|
{
|
|
public struct HomeCacheInfoStruct : IStructObject
|
|
{
|
|
public int m_objectID;
|
|
public int GetObjectID()
|
|
{
|
|
return m_objectID;
|
|
}
|
|
public void SetObjectID(int id)
|
|
{
|
|
m_objectID = id;
|
|
}
|
|
public bool IsNull()
|
|
{
|
|
return m_objectID == -1;
|
|
}
|
|
|
|
public bool NeedSave;
|
|
public void SetNeedSave(bool needSave)
|
|
{
|
|
NeedSave = needSave;
|
|
if (needSave)
|
|
{
|
|
GetDataSeqSave().MakeDirty();
|
|
}
|
|
}
|
|
public bool GetNeedSave()
|
|
{
|
|
return NeedSave || dataSeqSave.IsDirty();
|
|
}
|
|
|
|
//最后一次访问时间,用来淘汰
|
|
public long LastAccessTime;
|
|
|
|
//领地版本号
|
|
public int homeVer;
|
|
|
|
//保存DB
|
|
private DataSeqSave dataSeqSave;
|
|
|
|
public DataSeqSave GetDataSeqSave()
|
|
{
|
|
if (dataSeqSave == null)
|
|
{
|
|
return dataSeqSave = new DataSeqSave();
|
|
}
|
|
return dataSeqSave;
|
|
}
|
|
}
|
|
|
|
public class WorldHomePlayerData
|
|
{
|
|
public bool notifyClient;//后续是否需要通知客户端
|
|
public List<long> homeAdjoinUidList = new List<long>();//玩家相邻领地列表临时存储
|
|
public List<long> homeEnemyUidList = new List<long>();//玩家仇人领地列表临时存储
|
|
public Dictionary<long, long> homeUidDbList = new Dictionary<long, long>();//玩家领地去查询数据库临时存储
|
|
}
|
|
|
|
public class WorldHomeData : IServerDataObj
|
|
{
|
|
public override int GetDataType()
|
|
{
|
|
return WorldDataObjType.WorldHomeData;
|
|
}
|
|
|
|
public Dictionary<long, long> m_homeIDMap; //uid->index 用于快速查找m_cacheStructHomeInfo中数据
|
|
public StructMemoryCache<HomeCacheInfoStruct> m_cacheStructHomeInfo;//cache home
|
|
public Dictionary<long, WorldHomePlayerData> m_homePlayerMap; //uid->WorldHomePlayerData 用于临时存储玩家相邻领地和仇人领地
|
|
|
|
//来回切换
|
|
public int curSaveHomeIdx;
|
|
public Dictionary<long, long> m_saveHomeIDMap; //key:uid 找 m_homeIDMap->index 用于快速保存数据索引
|
|
public Dictionary<long, long> m_saveHomeIDMap1; //key:uid 找 m_homeIDMap->index 用于快速保存数据索引
|
|
|
|
public bool isLoadFileDataSuccess;//是否加载文件数据成功
|
|
public bool isFreeFullCache; //是否正在定时淘汰cache
|
|
public int maxCacheCount;//最多能支持的cache总数
|
|
public int autoRefreshIdx;//当前自动刷新的索引
|
|
|
|
public WorldHomeData(int cacheCount)
|
|
{
|
|
curSaveHomeIdx = 0;
|
|
isLoadFileDataSuccess = false;
|
|
isFreeFullCache = false;
|
|
maxCacheCount = cacheCount;
|
|
autoRefreshIdx = 0;
|
|
m_homeIDMap = new Dictionary<long, long>();
|
|
m_saveHomeIDMap = new Dictionary<long, long>();
|
|
m_saveHomeIDMap1 = new Dictionary<long, long>();
|
|
m_cacheStructHomeInfo = new StructMemoryCache<HomeCacheInfoStruct>(cacheCount);
|
|
m_homePlayerMap = new Dictionary<long, WorldHomePlayerData>();
|
|
}
|
|
|
|
//cache是否快满了
|
|
public bool CacheIsFull()
|
|
{
|
|
//差不多满了,可以删除部分
|
|
if (m_homeIDMap.Count + 500 >= maxCacheCount)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
//获取当前正在保存cache map
|
|
public ref Dictionary<long, long> GetWorldHomeSaveMap()
|
|
{
|
|
if (curSaveHomeIdx == 0)
|
|
{
|
|
return ref m_saveHomeIDMap;
|
|
}
|
|
else
|
|
{
|
|
return ref m_saveHomeIDMap1;
|
|
}
|
|
}
|
|
|
|
//切换正在保存的cache map 索引
|
|
public void ChgCurWorldHomeSaveMap(ref int oldSaveHomeIdx)
|
|
{
|
|
oldSaveHomeIdx = curSaveHomeIdx;
|
|
|
|
if (curSaveHomeIdx == 0)
|
|
{
|
|
curSaveHomeIdx = 1;
|
|
}
|
|
else
|
|
{
|
|
curSaveHomeIdx = 0;
|
|
}
|
|
}
|
|
|
|
//该玩家后面需要保存了
|
|
public int AddUid2WorldHomeSaveMap(long uid)
|
|
{
|
|
if (curSaveHomeIdx == 0)
|
|
{
|
|
if (!m_saveHomeIDMap.ContainsKey(uid))
|
|
m_saveHomeIDMap[uid] = 1;
|
|
}
|
|
else
|
|
{
|
|
if (!m_saveHomeIDMap1.ContainsKey(uid))
|
|
m_saveHomeIDMap1[uid] = 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//清除当前cache map
|
|
public int ClearWorldHomeSaveMap(int clearSaveMapIdx)
|
|
{
|
|
if (clearSaveMapIdx == 0)
|
|
{
|
|
m_saveHomeIDMap.Clear();
|
|
}
|
|
else
|
|
{
|
|
m_saveHomeIDMap1.Clear();
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//是否cache数据都保存好了
|
|
public bool IsAllDataSave()
|
|
{
|
|
if (curSaveHomeIdx == 0)
|
|
{
|
|
if (m_saveHomeIDMap.Count > 0)
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
if (m_saveHomeIDMap1.Count > 0)
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|