先看下我的Bson结构:
{
"_id" : ObjectId("56e2642e6f29584fa01d02be"),
"deviceId" : "25a3928850c31fffbb470fb18d082c42191d9eb3",
"avatarName" : "CCC",
"avatarIndex" : 2,
"avatarLevel" : 1,
"avatarCreateTime" : "2016/3/11 14:22:38",
"economy" : {
"glod" : -2236
},
"friend" : [["Q1Q"], ["23EE#"]],
"message" : {
"QQQ" : [{
"content" : "你大爷的?",
"sendTime" : ISODate("2016-03-15T02:23:27.743Z")
}, {
"content" : "你大爷的?",
"sendTime" : ISODate("2016-03-15T02:23:32.706Z")
}]
}
}
具体操作如下,
#region //设备登录信息
/// <summary>
/// 设备登录服务器 插入时间
/// </summary>
/// <param name="deviceId">设备ID</param>
/// <param name="devicename">设备类型</param>
/// <returns></returns>
public bool DeviceLogin(string deviceId, string devicename)
{
MongoClient mongoClient = new MongoClient(connection);
MongoServer mongoServer = mongoClient.GetServer();
MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
try
{
IMongoQuery device = Query.EQ("deviceID", deviceId);
BsonDocument bson = mongoCollection.FindOne(device);
if (bson == null)
{
BsonArray loginDetail = new BsonArray { DateTime.Now.ToString() };
BsonDocument doc = new BsonDocument();
doc.Add("deviceID", deviceId);
doc.Add("deviceType", devicename);
doc.Add("registerTime", DateTime.Now.ToString());
doc.Add("LoginCount", 1);
doc.Add("loginDetail", loginDetail);
Console.WriteLine("{0}: 创建设备账号! 设备ID :{1}, 机型 :{2} ", collectionName, deviceId, devicename);
return mongoCollection.Insert(doc).Ok;
}
else
{
IMongoQuery query = Query.EQ("deviceID", deviceId);
UpdateDocument update = new UpdateDocument { { "$inc", new QueryDocument{ {"LoginCount", 1 } } },
{ "$addToSet", new QueryDocument{ { "loginDetail", DateTime.Now.ToString() } } }
};
Console.WriteLine("{0}: 登录设备账号! 设备ID :{1}, 机型 :{2} ", collectionName, deviceId, devicename);
return mongoCollection.Update(query, update).Ok;
}
}
catch (Exception e)
{
stateMessage = e.ToString();
Console.WriteLine("数据库操作错误! 集合名称{0}", collectionName);
Console.WriteLine( stateMessage );
return false;
}
}
/// <summary>
/// 设置玩家等级
/// </summary>
/// <param name="avatarName"></param>
/// <param name="level"></param>
/// <returns></returns>
public bool UpdateAvatarLevel(string avatarName, int level)
{
MongoClient mongoClient = new MongoClient(connection);
MongoServer mongoServer = mongoClient.GetServer();
MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
try
{
IMongoQuery query = Query.EQ("avatarName", avatarName);
UpdateDocument update = new UpdateDocument { { "$inc", new QueryDocument { { "avatarLevel", level } } } };
if (mongoCollection.Update(query, update).Ok)
{
Console.WriteLine("{0}角色:{1},设置角色等级成功 ", collectionName, avatarName);
return true;
}
else
{
Console.WriteLine("{0}角色:{1},设置角色等级失败 ", collectionName, avatarName);
return false;
}
}
catch (Exception e)
{
Console.WriteLine("{0}角色:{1},设置角色等级异常, ErrorMessage:{3} ", collectionName, avatarName, e.ToString());
stateMessage = e.ToString();
}
return false;
}
#endregion
#region//玩家具体信息
/// <summary>
/// 创建玩家角色
/// </summary>
/// <param name="deviceId">设备ID</param>
/// <param name="avatarName">角色昵称</param>
/// <param name="avatarIndex">角色ID</param>
/// <param name="avatrLevel">角色等级</param>
/// <returns></returns>
public bool CreateAvatr(string deviceId, string avatarName, byte avatarIndex, short avatrLevel)
{
MongoClient mongoClient = new MongoClient(connection);
MongoServer mongoServer = mongoClient.GetServer();
MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
try
{
IMongoQuery device = Query.EQ("avatarName", avatarName);
BsonDocument bson = mongoCollection.FindOne(device);
if (bson == null)
{
BsonDocument doc = new BsonDocument();
doc.Add("deviceId", deviceId);
doc.Add("avatarName", avatarName);
doc.Add("avatarIndex", avatarIndex);
doc.Add("avatarLevel", avatrLevel);
doc.Add("avatarCreateTime", DateTime.Now.ToString());
Console.WriteLine("{0}:设备:{1},创建角色:昵称:{2},索引:{3},等级:{4} ", collectionName, deviceId, avatarName, avatarIndex, avatrLevel);
return mongoCollection.Insert(doc).Ok;
}
else
{
Console.WriteLine("{0}:设备:{1},创建角色失败:昵称:{2},索引:{3},等级:{4}, ErrorMessage:{5} ", collectionName, deviceId, avatarName, avatarIndex, avatrLevel, "昵称已经存在");
stateMessage = "昵称已经存在";
return false;
}
}
catch (Exception e)
{
Console.WriteLine("{0}:设备:{1},创建角色异常:昵称:{2},索引:{3},等级:{4}, ErrorMessage:{5} ", collectionName, deviceId, avatarName, avatarIndex, avatrLevel, e.ToString());
stateMessage = e.ToString();
return false;
}
}
// <summary>
// 返回角色列表
// </summary>
// <param name="deviceId"></param>
// <returns></returns>
public List<Avatars> GetAvatarList(string deviceId)
{
List<Avatars> avatarlist = new List<Avatars>();
MongoClient mongoClient = new MongoClient(connection);
MongoServer mongoServer = mongoClient.GetServer();
MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
try
{
IMongoQuery query = Query.EQ("deviceId", deviceId);
FieldsDocument fddoc = new FieldsDocument();
fddoc.Add("avatarName", 1);
fddoc.Add("avatarIndex", 1);
fddoc.Add("avatarLevel", 1);
MongoCursor<BsonDocument> doc = mongoCollection.Find(query).SetFields(fddoc);
foreach (BsonDocument bs in doc)
{
Avatars avatar = new Avatars();
if (bs.Contains("avatarName"))
avatar.avatarName = (string)bs["avatarName"];
if (bs.Contains("avatarIndex"))
avatar.avatarIndex = (Byte)bs["avatarIndex"];
if (bs.Contains("avatarLevel"))
avatar.avatarLevel = (short)bs["avatarLevel"];
avatarlist.Add(avatar);
}
Console.WriteLine("{0}设备:{1},返回角色列表, 角色个数{2} ", collectionName, deviceId, avatarlist.Count);
}
catch (Exception e)
{
Console.WriteLine("{0}设备:{1},返回角色列表异常, ErrorMessage:{3} ", collectionName, deviceId, e.ToString());
stateMessage = e.ToString();
}
return avatarlist;
}
#endregion
#region //角色任务
/// <summary>
/// 获取玩家的任务
/// </summary>
/// <param name="avatarName"></param>
/// <returns></returns>
public List<TaskDetail> GetAvatarTask(string avatarName)
{
MongoClient mongoClient = new MongoClient(connection);
MongoServer mongoServer = mongoClient.GetServer();
MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
List<TaskDetail> taskDetail = new List<TaskDetail>();
try
{
//IMongoQuery query = Query.EQ("avatarName", avatarName);
IMongoQuery query = Query.And(Query.EQ("avatarName", avatarName), Query.Exists("task"));
BsonArray bson = mongoCollection.FindOne(query)["task"].AsBsonArray;
if ( bson != null)
{
foreach (BsonDocument bdoc in bson)
{
TaskDetail task = new TaskDetail();
if (bdoc.Contains("taskType"))
task.taskType = ((Byte)bdoc["taskType"]);
if (bdoc.Contains("taskID"))
task.taskID = (Byte)bdoc["taskID"];
if (bdoc.Contains("taskState"))
task.taskState = ((Byte)bdoc["taskState"]);
if (bdoc.Contains("lastTime"))
task.lastTime = bdoc["lastTime"].AsDateTime;
taskDetail.Add(task);
}
}
Console.WriteLine("{0}角色:{1},返回角色任务列表,个数为{2} ", collectionName, avatarName, taskDetail.Count);
}
catch (Exception e)
{
//Console.WriteLine("{0}角色:{1},返回角色任务列表异常, ErrorMessage:{3} ", collectionName, avatarName, e.ToString());
stateMessage = e.ToString();
Console.WriteLine( stateMessage );
}
return taskDetail;
}
/// <summary>
/// 删除一个角色
/// </summary>
/// <param name="avatartName"></param>
/// <returns></returns>
public bool RemoveAvatar(string avatartName)
{
List<Avatars> avatarlist = new List<Avatars>();
MongoClient mongoClient = new MongoClient(connection);
MongoServer mongoServer = mongoClient.GetServer();
MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
try
{
IMongoQuery query = Query.EQ("avatarName", avatartName);
if (mongoCollection.Remove(query).Ok)
{
Console.WriteLine("{0}设备:{1},删除角色列表成功 ", collectionName, avatartName);
return true;
}
else
{
Console.WriteLine("{0}设备:{1},删除角色列表失败 ", collectionName, avatartName);
return false;
}
}
catch (Exception e)
{
Console.WriteLine("{0}设备:{1},删除角色列表异常, ErrorMessage:{3} ", collectionName, avatartName, e.ToString());
stateMessage = e.ToString();
return false;
}
}
public bool SetAvatarTask(string avatarName, TaskDetail task)
{
MongoClient mongoClient = new MongoClient(connection);
MongoServer mongoServer = mongoClient.GetServer();
MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
try
{
BsonDocument doc = new BsonDocument();
doc.Add("taskID", task.taskID);
doc.Add("taskType", task.taskType);
doc.Add("taskState", task.taskState);
doc.Add("lastTime", task.lastTime);
IMongoQuery query = Query.EQ("avatarName", avatarName);
UpdateDocument update = new UpdateDocument { { "$addToSet", new QueryDocument { { "task", doc } } } };
Console.WriteLine("{0}: 设置任务成功! 角色名称 avatarName:{1} 任务类型 task.taskType:{2} ", collectionName, avatarName, task.taskType);
return mongoCollection.Update(query, update).Ok;
}
catch (Exception e)
{
stateMessage = e.ToString();
Console.WriteLine("数据库操作错误! 集合名称{0}", collectionName);
return false;
}
}
public bool UpdateAvatarTask(string avatarName, TaskDetail task)
{
MongoClient mongoClient = new MongoClient(connection);
MongoServer mongoServer = mongoClient.GetServer();
MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
//mongoServer.RequestStart( mongoDatabase );
MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
try
{
BsonDocument doc = new BsonDocument();
doc.Add("taskID", task.taskID);
doc.Add("taskType", task.taskType);
doc.Add("taskState", task.taskState);
doc.Add("lastTime", task.lastTime);
//IMongoQuery query = Query.EQ( "avatarName", avatarName );
IMongoQuery query = Query.And( Query.EQ("avatarName", avatarName), Query.EQ("task.taskID", task.taskID ));
QueryDocument queryDoc = new QueryDocument { { "avatarName", avatarName }, { "task.taskID", task.taskID } };
//UpdateDocument update = new UpdateDocument { { "$set", new QueryDocument { { "task.$.taskState", task.taskState } } },
// };
//UpdateDocument update = new UpdateDocument { { "$set", new QueryDocument { { "task.$.taskType", task.taskType } } },
// new QueryDocument { { "task.$.taskState", task.taskState } } ,
// new QueryDocument { { "task.$.lastTime", task.lastTime } } ,
//
UpdateDocument updates = new UpdateDocument();
updates.Add("task.$.taskType", task.taskType);
updates.Add("task.$.taskState", task.taskState);
updates.Add("task.$.lastTime", task.lastTime);
UpdateDocument update = new UpdateDocument { { "$set", updates }};
// mongoServer.RequestDone();
if (mongoCollection.Update(query, update).Ok)
{
Console.WriteLine("{0}: 设置任务成功! 任务类型 task.taskType:{1} ", collectionName, task.taskType);
return true ;
}
else
{
Console.WriteLine("{0}: 设置任务失败! 任务类型 task.taskType:{1} ", collectionName, task.taskType);
return true;
}
}
catch (Exception e)
{
stateMessage = e.ToString();
Console.WriteLine("数据库操作错误! 集合名称{0}", collectionName);
Console.WriteLine(stateMessage);
// mongoServer.RequestDone();
return false;
}
}
#endregion
#region//经济系统
/// <summary>
/// 获取经济系统数据
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public Economy GetEconomy(string avatarName)
{
MongoClient mongoClient = new MongoClient(connection);
MongoServer mongoServer = mongoClient.GetServer();
MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
Economy economy = new Economy();
try
{
IMongoQuery query = Query.And(Query.EQ("avatarName", avatarName), Query.Exists("economy"));
BsonDocument doc = mongoCollection.FindOne(query)["economy"].AsBsonDocument;
if (doc != null)
{
if (doc.Contains("glod"))
economy.glod = (int)doc["glod"].AsInt32;
if (doc.Contains("glodTotal"))
economy.glodTotal = (int)doc["glodTotal"].AsInt32;
if (doc.Contains("silver"))
economy.silver = (int)doc["silver"].AsInt32;
if (doc.Contains("silverTotal"))
economy.silverTotal = (int)doc["silverTotal"].AsInt32;
return economy;
}
Console.WriteLine("{0}角色:{1},返回经济系统 ", collectionName, avatarName);
}
catch (Exception e)
{
//
stateMessage = e.ToString();
Console.WriteLine("{0}角色:{1},返回经济系统异常, ErrorMessage:{3} ", collectionName, avatarName, stateMessage);
}
return null;
}
/// <summary>
/// 设置经济系统数据
/// </summary>
/// <param name="name"></param>
/// <param name="economy"></param>
/// <returns></returns>
public bool SetEconomy(string avatarName, Economy economy)
{
MongoClient mongoClient = new MongoClient(connection);
MongoServer mongoServer = mongoClient.GetServer();
MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
try
{
BsonDocument doc = new BsonDocument();
doc.Add("glod", economy.glod);
doc.Add("glodTotal", economy.glodTotal);
doc.Add("silver", economy.silver);
doc.Add("silverTotal", economy.silverTotal);
IMongoQuery query = Query.EQ("avatarName", avatarName);
UpdateDocument update = new UpdateDocument { { "$set", new QueryDocument { { "economy", doc } } } };
if ( mongoCollection.Update(query, update).Ok )
{
Console.WriteLine("{0}角色:{1},设置经济系统成功 ", collectionName, avatarName);
return true;
}else
{
Console.WriteLine("{0}角色:{1},设置经济系统失败 ", collectionName, avatarName);
return false;
}
}
catch (Exception e)
{
Console.WriteLine("{0}角色:{1},返回经济系统异常, ErrorMessage:{3} ", collectionName, avatarName, e.ToString());
stateMessage = e.ToString();
return false;
}
}
/// <summary>
/// 消耗充值金币
/// </summary>
/// <param name="avatarName"></param>
/// <param name="count"></param>
/// <returns></returns>
public bool ExpendEconomy( string avatarName, int count )
{
MongoClient mongoClient = new MongoClient(connection);
MongoServer mongoServer = mongoClient.GetServer();
MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
try
{
IMongoQuery query = Query.EQ("avatarName", avatarName);
BsonDocument doc = new BsonDocument();
doc.Add();
UpdateDocument update = new UpdateDocument { { "$inc", new QueryDocument { { "economy.glod", count } } } };
if (mongoCollection.Update(query, update).Ok)
{
Console.WriteLine("{0}角色:{1},设置经济系统成功 ", collectionName, avatarName);
return true;
}
else
{
Console.WriteLine("{0}角色:{1},设置经济系统失败 ", collectionName, avatarName);
return false;
}
}
catch (Exception e)
{
Console.WriteLine("{0}角色:{1},返回经济系统异常, ErrorMessage:{3} ", collectionName, avatarName, e.ToString());
stateMessage = e.ToString();
}
return false;
}
#endregion
#region//好友系统
/// <summary>
/// 获取好友列表
/// </summary>
/// <param name="avatarName">获取好友列表</param>
/// <returns>玩家数组</returns>
public string[] GetFriendList(string avatarName)
{
MongoClient mongoClient = new MongoClient(connection);
MongoServer mongoServer = mongoClient.GetServer();
MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
List<string> friend = new List<string>();
try
{
IMongoQuery query = Query.And(Query.EQ("avatarName", avatarName), Query.Exists("friend"));
BsonArray doc = mongoCollection.FindOne(query)["friend"].AsBsonArray;
Console.WriteLine( doc.Count );
if (doc != null)
{
string[] friendName = new string[doc.Count];
for (int i = 0; i < doc.Count; i ++ )
{
friendName[i] = doc[i].ToString();
}
return friendName;
}
return null;
}
catch (Exception e)
{
//
stateMessage = e.ToString();
//Console.WriteLine("{0}角色:{1},返回经济系统异常, ErrorMessage:{3} ", collectionName, avatarName, stateMessage);
}
return null;
}
/// <summary>
/// 添加好友
/// </summary>
/// <param name="friend"></param>
/// <param name="avatarName"></param>
/// <returns></returns>
public bool AddFriend(string friend, string avatarName)
{
MongoClient mongoClient = new MongoClient(connection);
MongoServer mongoServer = mongoClient.GetServer();
MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
try
{
IMongoQuery query = Query.EQ("avatarName", avatarName) ;
BsonArray friendArray = new BsonArray();
friendArray.Add( friend );
UpdateDocument update = new UpdateDocument { { "$addToSet", new QueryDocument { { "friend", friendArray } } } };
if (mongoCollection.Update(query, update).Ok)
{
Console.WriteLine("{0}角色:{1},添加好友成功 ", collectionName, avatarName);
return true;
}
else
{
Console.WriteLine("{0}角色:{1},添加好友失败 ", collectionName, avatarName);
return false;
}
}
catch (Exception e)
{
stateMessage = e.ToString();
Console.WriteLine("{0}角色:{1},添加好友异常, ErrorMessage:{3} ", collectionName, avatarName, stateMessage);
}
return false;
}
/// <summary>
/// 删除好友
/// </summary>
/// <param name="friendName"></param>
/// <param name="tagName"></param>
/// <returns></returns>
public bool RemoveFriend(string friend, string avatarName)
{
MongoClient mongoClient = new MongoClient(connection);
MongoServer mongoServer = mongoClient.GetServer();
MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
try
{
IMongoQuery query = Query.And(Query.EQ("avatarName", avatarName), Query.Exists("friend"));
BsonArray friendArray = new BsonArray();
friendArray.Add(friend);
UpdateDocument update = new UpdateDocument { { "$pull", new QueryDocument { { "friend", friendArray } } } };
if (mongoCollection.Update(query, update).Ok)
{
Console.WriteLine("{0}角色:{1},删除好友成功 ", collectionName, avatarName);
return true;
}
else
{
Console.WriteLine("{0}角色:{1},删除好友失败 ", collectionName, avatarName);
return false;
}
}
catch (Exception e)
{
stateMessage = e.ToString();
Console.WriteLine("{0}角色:{1},删除好友异常, ErrorMessage:{3} ", collectionName, avatarName, stateMessage);
}
return false;
}
#endregion
#region//离线消息
/// <summary>
/// 获取玩家离线消息 并且清空消息队列
/// </summary>
/// <param name="avatarName"></param>
/// <returns></returns>
public Dictionary<string, List<Message>> GetOffLineMessage(string avatarName)
{
MongoClient mongoClient = new MongoClient(connection);
MongoServer mongoServer = mongoClient.GetServer();
MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
Dictionary<string, List<Message>> msgDict = new Dictionary<string, List<Message>>();
try
{
IMongoQuery query = Query.And(Query.EQ("avatarName", avatarName), Query.Exists("message"));
BsonDocument bson = mongoCollection.FindOne(query)["message"].AsBsonDocument;
if (bson != null)
{
var bEle = bson.Elements;
//List<BsonElement> bElea = (List<BsonElement>) bson.Elements;
Console.WriteLine(bEle.GetType());
foreach (BsonElement bdoc in bEle)
{
string msgName = bdoc.Name;
BsonArray doc = bdoc.ToBsonDocument()["Value"].AsBsonArray;
List<Message> msgList = new List<Message>();
foreach (BsonDocument docs in doc)
{
Message msg = new Message();
msg.from = msgName;
if (docs.Contains("content"))
msg.content = docs["content"].ToString();
if (docs.Contains("sendTime"))
msg.sendTime = docs["sendTime"].AsDateTime;
msgList.Add(msg);
}
msgDict.Add(msgName, msgList);
}
UpdateDocument update = new UpdateDocument { { "$unset", new QueryDocument{ {"message", ""} } } };
mongoCollection.Update(query, update);
return msgDict;
}
else
{
return null;
}
}
catch (Exception e)
{
stateMessage = e.ToString();
}
return null;
}
/// <summary>
/// 添加好友离线消息
/// </summary>
/// <param name="message"></param>
/// <returns></returns>
public bool AddOffLineMessage(string avatarName, Message message)
{
MongoClient mongoClient = new MongoClient(connection);
MongoServer mongoServer = mongoClient.GetServer();
MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
try
{
IMongoQuery query = Query.EQ("avatarName", avatarName);
BsonDocument doc = new BsonDocument();
doc.Add("content", message.content );
doc.Add("sendTime", message.sendTime);
UpdateDocument update = new UpdateDocument { { "$addToSet", new QueryDocument { { "message." + message.from, doc } } } };
if (mongoCollection.Update(query, update).Ok)
{
Console.WriteLine("{0}角色:{1},离线消息添加成功 ", collectionName, avatarName);
return true;
}
else
{
Console.WriteLine("{0}角色:{1},离线消息添加失败 ", collectionName, avatarName);
return false;
}
}
catch (Exception e)
{
stateMessage = e.ToString();
Console.WriteLine("{0}角色:{1},添加离线消息添加异常, ErrorMessage:{3} ", collectionName, avatarName, stateMessage);
}
return false;
}
#endregion