private static void LoadUnLineData() { try { IDictionary <string, byte[]> pairs = null; RedisConnectionPool.ProcessReadOnly(client => { //client.Add(string.Format("{0}:{1}", sessionRedisKey, sessionId), new GameSession().User, new TimeSpan(Timeout * 1000)); var keys = client.SearchKeys(string.Format("{0}:*", sessionRedisKey)); if (keys == null || keys.Count == 0) { return; } pairs = client.GetAll <byte[]>(keys); }); pairs = pairs ?? new Dictionary <string, byte[]>(); foreach (var pair in pairs) { var arr = pair.Key.Split(new char[] { ':' }, 2); if (arr.Length != 2) { continue; } Guid sessionId; if (Guid.TryParse(arr[1], out sessionId)) { var user = Encoding.UTF8.GetString(pair.Value).ParseJson <SessionUser>(); if (user == null) { continue; } var session = new GameSession(sessionId, null) { LastActivityTime = user.OnlineDate }; _globalSession[sessionId] = session; int userId = user.GetUserId(); GameSession oldsession; Guid sid; if (_userHash.TryGetValue(userId, out sid) && sid != session.KeyCode && (oldsession = Get(sid)) != null) { //防止先后问题 if (oldsession.LastActivityTime < session.LastActivityTime) { session.UnBind(); Expire(session, 0); } else { continue; } } _userHash[userId] = session.KeyCode; session.User = user; } } } catch (Exception er) { TraceLog.WriteError("Load GameSession from redis faild,{0}", er); } }
private static void LoadUnLineData() { try { IDictionary<string, byte[]> pairs = null; RedisConnectionPool.ProcessReadOnly(client => { //client.Add(string.Format("{0}:{1}", sessionRedisKey, sessionId), new GameSession().User, new TimeSpan(Timeout * 1000)); var keys = client.SearchKeys(string.Format("{0}:*", sessionRedisKey)); if (keys == null || keys.Count == 0) return; pairs = client.GetAll<byte[]>(keys); }); pairs = pairs ?? new Dictionary<string, byte[]>(); foreach (var pair in pairs) { var arr = pair.Key.Split(new char[] { ':' }, 2); if (arr.Length != 2) continue; Guid sessionId; if (Guid.TryParse(arr[1], out sessionId)) { var user = Encoding.UTF8.GetString(pair.Value).ParseJson<SessionUser>(); if (user == null) continue; var session = new GameSession(sessionId, null) { LastActivityTime = user.OnlineDate }; _globalSession[sessionId] = session; int userId = user.GetUserId(); GameSession oldsession; Guid sid; if (_userHash.TryGetValue(userId, out sid) && sid != session.KeyCode && (oldsession = Get(sid)) != null) { //防止先后问题 if (oldsession.LastActivityTime < session.LastActivityTime) { session.UnBind(); Expire(session, 0); } else { continue; } } _userHash[userId] = session.KeyCode; session.User = user; } } } catch (Exception er) { TraceLog.WriteError("Load GameSession from redis faild,{0}", er); } }