//##################################################################################### // 수신된 메세지 처리 private NetMessage WhenReqLogin(ServerVisitor client, NetMessageStream msg) { string userName = msg.ReadData <string>(); LoginResults loginResult = LoginResults.Success; // 로그인을 받을 수 있는 상태이면 if (this.CanLogin) { string password = msg.ReadData <string>(); string versionText = Utility.Version.Zero.ToString(); if (!msg.EndOfStream) { versionText = msg.ReadData <string>(); } Utility.Version clientVersion = new Utility.Version(versionText); // 클라이언트 버전이 서버버전과 같은지 확인 if (Application.ProductVersion == clientVersion) { // 회원여부 확인 및 비밀번호 얻기 bool isMember = m_accountList.ContainsKey(userName); string realPassword = ""; if (isMember) { realPassword = m_accountList[userName].Password; } // 회원이 아니면 실패 if (isMember == false) { loginResult = LoginResults.Fail_NotUser; } // 비밀번호가 틀리면 실패 else if (password != realPassword) { loginResult = LoginResults.Fail_WrongPassword; } // 이미 접속된 유저와 이름이 중복되면 실패 else if (m_loginUserList.Any((user) => user.Value.Name == userName)) { loginResult = LoginResults.Fail_AlreadyLogin; } // 로그인 성공시 if (loginResult == LoginResults.Success) { // 접속자 목록에 추가 m_loginUserList.Add(client.ID, new GamePlayer() { Name = userName }); // 로그인 사실을 모두에게 알림 NetMessageStream loginNotice = new NetMessageStream(); loginNotice.WriteData(userName); this.NoticeDelegate(loginNotice.CreateMessage((int)MessageTypes.Ntf_UserLogin)); } } else { // 클라이언트의 버전과 서버의 버전이 다르므로 접속불가 loginResult = LoginResults.Fail_DifferentVersion; } } else { // 로그인을 받을 수 없음 loginResult = LoginResults.Fail_ServerNotReady; } // 로그 Utility.Logger.GetInstance().Log(string.Format("\"{0}\"님이 로그인을 시도했습니다. 결과 : {1}", userName, loginResult.ToString())); // 로그인 결과 전송 NetMessageStream writer = new NetMessageStream(); writer.WriteData((int)loginResult); return(writer.CreateMessage((int)MessageTypes.Rsp_Login)); }