Guest User

Untitled

a guest
Jan 9th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.93 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace ConsoleApp3 {
  5. class Program {
  6. static void Main(string[] args) {
  7. IUserInputtingReceiver main = new UserInputtingReceiver();
  8.  
  9. main.StartChecking();
  10. }
  11. }
  12.  
  13. interface IUserInputtingReceiver {
  14. void StartChecking();
  15. }
  16.  
  17. class UserInputtingReceiver : IUserInputtingReceiver {
  18. public void StartChecking() {
  19. IPasswordChecker checker = new PasswordChecker();
  20. InitializeEvents(checker);
  21.  
  22. while(true) {
  23. Console.WriteLine("ユーザー名を入力してください:");
  24. var userName = Console.ReadLine();
  25.  
  26. Console.WriteLine("パスワードを入力してください:");
  27. var password = Console.ReadLine();
  28.  
  29. Console.WriteLine("\n認証結果");
  30. checker.ReadUserInfo(userName, password);
  31. Console.WriteLine("--------");
  32. }
  33. }
  34.  
  35. private void InitializeEvents(IPasswordChecker checker) {
  36. checker.UndefinedUserEntered += Checker_UndefinedUserEntered;
  37. checker.InvalidPasswordEntered += Checker_InvalidPasswordEntered;
  38. checker.CertificationSucceeded += Checker_CertificationSucceeded;
  39. checker.CertificationFailed += Checker_CertificationFailed;
  40. }
  41.  
  42. private void Checker_UndefinedUserEntered(object sender, UserInfoEventArgs e) {
  43. Console.WriteLine($"・ユーザー名\"{e.Info.UserName}\"は存在しません");
  44. }
  45.  
  46. private void Checker_InvalidPasswordEntered(object sender, UserInfoEventArgs e) {
  47. Console.WriteLine($"・パスワード\"{e.Info.Password}\"は正しくありません");
  48. }
  49.  
  50. private void Checker_CertificationSucceeded(object sender, UserInfoEventArgs e) {
  51. Console.WriteLine($"・\"{e.Info.UserName}\"のログインに成功しました");
  52. }
  53.  
  54. private void Checker_CertificationFailed(object sender, UserInfoEventArgs e) {
  55. Console.WriteLine($"・\"{e.Info.UserName}\"のログインに失敗しました");
  56. }
  57. }
  58.  
  59. interface IPasswordChecker {
  60. event EventHandler<UserInfoEventArgs> CertificationSucceeded;
  61. event EventHandler<UserInfoEventArgs> CertificationFailed;
  62. event EventHandler<UserInfoEventArgs> UndefinedUserEntered;
  63. event EventHandler<UserInfoEventArgs> InvalidPasswordEntered;
  64.  
  65. void ReadUserInfo(string name, string word);
  66. }
  67.  
  68. class PasswordChecker : IPasswordChecker {
  69. ////=============================================================================
  70. //// Local Field
  71. ////
  72. ////=============================================================================
  73. private IDictionary<string, string> _userInfoDict = new Dictionary<string, string>() {
  74. ["Tsumio"] = "Tsumio114Tensaida4",
  75. ["Tkool"] = "abcd1234",
  76. ["Unity"] = "yunithi",
  77. ["NEET"] = "No_Job",
  78. };
  79.  
  80. ////=============================================================================
  81. //// Properties
  82. ////
  83. ////=============================================================================
  84. private IDictionary<string, string> UserInfoDict {
  85. get {
  86. return _userInfoDict;
  87. }
  88. }
  89.  
  90. ////=============================================================================
  91. //// Events
  92. ////
  93. ////=============================================================================
  94. public event EventHandler<UserInfoEventArgs> CertificationSucceeded;
  95. public event EventHandler<UserInfoEventArgs> CertificationFailed;
  96. public event EventHandler<UserInfoEventArgs> UndefinedUserEntered;
  97. public event EventHandler<UserInfoEventArgs> InvalidPasswordEntered;
  98.  
  99. protected virtual void OnCertificationSucceeded(UserInfoEventArgs e) {
  100. CertificationSucceeded?.Invoke(this, e);
  101. }
  102.  
  103. protected virtual void OnCertificationFailed(UserInfoEventArgs e) {
  104. CertificationFailed?.Invoke(this, e);
  105. }
  106.  
  107. protected virtual void OnUndefinedUserEntered(UserInfoEventArgs e) {
  108. UndefinedUserEntered?.Invoke(this, e);
  109. }
  110.  
  111. protected virtual void OnInvalidPasswordEntered(UserInfoEventArgs e) {
  112. InvalidPasswordEntered?.Invoke(this, e);
  113. }
  114.  
  115. ////=============================================================================
  116. //// Password Checker
  117. ////
  118. ////=============================================================================
  119. private bool IsUserNameValid(string userName) {
  120. return UserInfoDict.ContainsKey(userName);
  121. }
  122.  
  123. private bool LoginSuccessfully(string userName, string password) {
  124. return UserInfoDict[userName] == password;
  125. }
  126.  
  127. private bool TryToLogin(UserInfo info) {
  128. if(!IsUserNameValid(info.UserName)) {
  129. OnUndefinedUserEntered(new UserInfoEventArgs(info));
  130. return false;
  131. }
  132.  
  133. if(LoginSuccessfully(info.UserName, info.Password)) {
  134. return true;
  135. } else {
  136. OnInvalidPasswordEntered(new UserInfoEventArgs(info));
  137. return false;
  138. }
  139. }
  140.  
  141. public void ReadUserInfo(string userName, string password) {
  142. using(var info = new UserInfo(userName, password)) {
  143. if(TryToLogin(info)) {
  144. OnCertificationSucceeded(new UserInfoEventArgs(info));
  145. } else {
  146. OnCertificationFailed(new UserInfoEventArgs(info));
  147. }
  148. }
  149. }
  150. }
  151.  
  152. class UserInfo : IDisposable {
  153. public string UserName { get; private set; }
  154. public string Password { get; private set; }
  155.  
  156. public UserInfo(string name, string password) {
  157. UserName = name;
  158. Password = password;
  159. }
  160.  
  161. #region IDisposable Support
  162. private bool disposedValue = false; // 重複する呼び出しを検出するには
  163.  
  164. protected virtual void Dispose(bool disposing) {
  165. if(!disposedValue) {
  166. if(disposing) {
  167. // TODO: マネージ状態を破棄します (マネージ オブジェクト)。
  168. Console.WriteLine("\nDispose実行");
  169. Password = String.Empty;
  170. }
  171.  
  172. // TODO: アンマネージ リソース (アンマネージ オブジェクト) を解放し、下のファイナライザーをオーバーライドします。
  173. // TODO: 大きなフィールドを null に設定します。
  174.  
  175. disposedValue = true;
  176. }
  177. }
  178.  
  179. // TODO: 上の Dispose(bool disposing) にアンマネージ リソースを解放するコードが含まれる場合にのみ、ファイナライザーをオーバーライドします。
  180. // ~PasswordRecorder() {
  181. // // このコードを変更しないでください。クリーンアップ コードを上の Dispose(bool disposing) に記述します。
  182. // Dispose(false);
  183. // }
  184.  
  185. // このコードは、破棄可能なパターンを正しく実装できるように追加されました。
  186. public void Dispose() {
  187. // このコードを変更しないでください。クリーンアップ コードを上の Dispose(bool disposing) に記述します。
  188. Dispose(true);
  189. // TODO: 上のファイナライザーがオーバーライドされる場合は、次の行のコメントを解除してください。
  190. // GC.SuppressFinalize(this);
  191. }
  192. #endregion
  193. }
  194.  
  195. class UserInfoEventArgs : EventArgs {
  196. public UserInfo Info { get; }
  197.  
  198. public UserInfoEventArgs(UserInfo info) {
  199. Info = info;
  200. }
  201. }
  202.  
  203. }
Add Comment
Please, Sign In to add comment