Example #1
0
        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);
            }
        }
Example #2
0
        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);
            }
        }