Example #1
0
        /// <summary>
        /// 处理用户登录的一些列操作,登陆不成功返回null,成功则返回一个LoginReturn
        /// </summary>
        /// <param name="msg"></param>
        /// <returns></returns>
        private static LoginReturn UserLogin(LoginData msg, byte[] login_ip)
        {
            //业务逻辑:
            //第一步,检测是否满足登陆条件,如果已经上线呵呵NULL,满足则进入第二步,否则返回NULL
            //第二步,将自己加入在线列表,并将自己在线的消息通知给在线好友
            //第三步获取对登陆者来说要进行更新的好友列表并返回LoginReturn
            if (isdebug)
            {
                Console.WriteLine("{0}--{1}", msg.username, msg.password);
            }
            LoginReturn info_return = new LoginReturn();
            User        temp_user   = new User();
            int         login_id    = SqlManager.checkUser(msg.username, msg.password, ref temp_user);

            if (login_id != -1)//是否满足登陆条件
            {
                if (isOnline(login_id))
                {
                    if (isdebug)
                    {
                        Console.WriteLine("已登录{0}", login_id);
                    }
                    return(null);
                }
                if (isdebug)
                {
                    Console.WriteLine("登录验证成功,用户id是{0}", login_id);
                }
                try
                {
                    //登记在线
                    //Idonline_Dic.Add(login_id,init_Vitality);
                    OnlineUserManager.addOnlineUser(new OnlineUser(login_id, login_ip, temp_user.name, temp_user.nickname));
                    //记录ip
                    // Ip_Dic.Add(login_id,login_ip);
                    //获取在线好友列表(用于返回给该用户),通知在线好友该用户在线了
                    info_return.OnlineFriends = getOnlineFriends(login_id);

                    //获取该用户的消息,一个用户刚刚上线,应该从数据库获取才对

                    info_return.message          = OnlineUserManager.user_list[login_id].getUserMessageList();
                    info_return.FriendsTimeStamp = SqlManager.getFriendsTimestamp(login_id);
                    info_return.GroupTimeStamp   = SqlManager.getGroupTimeStamp(login_id);
                    info_return.myTimeStamp      = SqlManager.getUserTimestamp(login_id);
                }
                catch (Exception e)
                {
                    Console.WriteLine("构建返回值时出现问题,{0}", e.Message);
                }
            }
            else
            {
                if (isdebug)
                {
                    Console.WriteLine("if({0}<0) then 密码搞错了 else 已经登录过了", login_id);
                }
                info_return = null;
            }
            return(info_return);
        }