/// <summary> /// 退出 /// </summary> /// <param name="session"></param> public void LogOff(SessionInfo session) { var dbInfo = session.DatabaseInfo; if (dbInfo != null) { dbInfo.RealPassword = WCF16001EncryptOperation.DecryptWithM004(dbInfo.Password); session.DBConnectionString = dbInfo.GetConnectionString(); } List <string> lstSysMsg = new List <string>(); //更新数据库中的用户在线属性 OperationReturn optReturn = ResourceOperations.ChangeUserStatus(session, "0"); if (!optReturn.Result) { currCallback.SendSysMessage(S1600MessageType.LogOffFailed, lstSysMsg); //LogOperation.WriteLog("Update " + lstLoginUsers[session.UserID].UserName + " status failed : " + optReturn.Message); return; } if (lstLoginUsers.Keys.Contains(currentUser.UserID)) { lstLoginUsers.Remove(currentUser.UserID); foreach (KeyValuePair <long, LoginUserInfo> user in lstLoginUsers) { if (user.Key != currentUser.UserID) { lstSysMsg.Clear(); lstSysMsg.Add(currentUser.UserID.ToString()); user.Value.CallBack.SendSysMessage(S1600MessageType.FriendOffline, lstSysMsg); } } } //LogOperation.WriteLog("User " + lstLoginUsers[session.UserID].UserName + " logoff"); }
/// <summary> /// 登录 /// </summary> /// <param name="session"></param> /// <param name="lstParams"> /// </param> public void LoginSystem(SessionInfo session) { List <string> lstSysMsg = new List <string>(); try { //判断传过来的参数不为空 if (session == null) { currCallback.SendSysMessage(S1600MessageType.LoginFailed, lstSysMsg); return; } var dbInfo = session.DatabaseInfo; if (dbInfo != null) { dbInfo.RealPassword = WCF16001EncryptOperation.DecryptWithM004(dbInfo.Password); session.DBConnectionString = dbInfo.GetConnectionString(); } string s = string.Empty; foreach (KeyValuePair <long, LoginUserInfo> pair in lstLoginUsers) { s = WCF16001EncryptOperation.DecryptWithM004(pair.Value.UserName) + " | "; } //LogOperation.WriteLog(s); currentUser = new LoginUserInfo(); currentUser.UserID = session.UserID; currentUser.UserSession = session; currentUser.UserName = session.UserInfo.Account; currentUser.CallBack = currCallback; //如果不包含这个用户 则加入该对象 //lstLoginUsers.Remove(currentUser.UserID); if (!lstLoginUsers.Keys.Contains(currentUser.UserID)) { lstLoginUsers.Add(currentUser.UserID, currentUser); s = "User Login : "******"User Logined : " + WCF16001EncryptOperation.DecryptWithM004(currentUser.UserName); // LogOperation.WriteLog(s); } catch (Exception ex) { //此处无需做任何操作 因为无论消息发送是否成功 该通道都要被删掉 s = "User Login send OffLine msg failed : " + WCF16001EncryptOperation.DecryptWithM004(currentUser.UserName) + ",\t" + ex.Message; //LogOperation.WriteLog(s); } lstLoginUsers.Remove(currentUser.UserID); //此处不可缺 删掉原来的callback 添加进现在的callback 用来更新callback通道 lstLoginUsers.Add(currentUser.UserID, currentUser); //LogOperation.WriteLog("Delete old and add new "); } currCallback.SendSysMessage(S1600MessageType.LoginSuceess, lstSysMsg); //更新数据库中的用户在线属性 OperationReturn optReturn = ResourceOperations.ChangeUserStatus(session, "1"); if (!optReturn.Result) { lstSysMsg.Clear(); lstSysMsg.Add("code = " + optReturn.Code + " ; message = " + optReturn.Message); currCallback.SendSysMessage(S1600MessageType.LoginFailed, lstSysMsg); return; } // currCallback.SendSysMessage(MessageType.TestMsg, "Message = " + optReturn.Message); //获得联系人 optReturn = PermissionFuncs.GetContacters(session); if (!optReturn.Result) { lstSysMsg.Clear(); lstSysMsg.Add("code = " + optReturn.Code + " ; message = " + optReturn.Message); currCallback.SendSysMessage(S1600MessageType.GetFriendFailed, lstSysMsg); return; } currCallback.InitFriendList(optReturn.Data as List <string>); //给在线的用户发送上线通知 foreach (KeyValuePair <long, LoginUserInfo> user in lstLoginUsers) { //通知每个用户 我上线啦 我本人就不用发了 if (user.Key != currentUser.UserID) { lstSysMsg.Clear(); lstSysMsg.Add(currentUser.UserID.ToString()); user.Value.CallBack.SendSysMessage(S1600MessageType.FriendOnline, lstSysMsg); } } //开始接收离线消息 List <string> lstParam = new List <string>(); lstParam.Add(currentUser.UserID.ToString()); optReturn = ChatMessageOperation.GetAllOffLineMsg(session, lstParam); if (optReturn.Result) { //LogOperation.WriteLog("Send offline message to " + currentUser.UserName); SendOfflineMsg(optReturn.Data as Dictionary <long, ChatMessage>); } } catch (Exception ex) { //LogOperation.WriteLog("Login error: " + ex.Message); } }