/// <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); }