LoginViewModel.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. using System.ComponentModel.Composition;
  2. using Microsoft.Practices.Prism.ViewModel;
  3. using Microsoft.Practices.Prism.Commands;
  4. using System.Threading.Tasks;
  5. using System.Net.Sockets;
  6. using System.Security.Cryptography;
  7. using System;
  8. namespace Module.Login
  9. {
  10. enum RealmLoginState : byte
  11. {
  12. RealmAuthLoginChallenge = 0,
  13. RealmAuthLonginProof = 1,
  14. AuthReconnectChallenge = 2,
  15. AuthReconnectProof = 3,
  16. AuthLoginPermit = 4,
  17. RealmList = 10,
  18. Surver = 48,
  19. }
  20. [Export(typeof(LoginViewModel))]
  21. [PartCreationPolicy(CreationPolicy.NonShared)]
  22. public class LoginViewModel : NotificationObject
  23. {
  24. private string username = "";
  25. private string password = "";
  26. private string logInfo = "";
  27. public LoginViewModel()
  28. {
  29. }
  30. public string Username
  31. {
  32. get
  33. {
  34. return username;
  35. }
  36. set
  37. {
  38. if (username == value)
  39. {
  40. return;
  41. }
  42. username = value;
  43. RaisePropertyChanged("Username");
  44. }
  45. }
  46. public string Password
  47. {
  48. get
  49. {
  50. return password;
  51. }
  52. set
  53. {
  54. if (password == value)
  55. {
  56. return;
  57. }
  58. password = value;
  59. RaisePropertyChanged("Password");
  60. }
  61. }
  62. public string LogInfo
  63. {
  64. get
  65. {
  66. return logInfo;
  67. }
  68. set
  69. {
  70. if (logInfo == value)
  71. {
  72. return;
  73. }
  74. logInfo = value;
  75. RaisePropertyChanged("LogInfo");
  76. }
  77. }
  78. public async void Login()
  79. {
  80. using (TcpClient tcpClient = new TcpClient())
  81. {
  82. // 异步连接
  83. await tcpClient.ConnectAsync("192.168.10.246", 19000);
  84. var stream = tcpClient.GetStream();
  85. // 验证通行证
  86. await LoginPermit(stream);
  87. }
  88. }
  89. public async Task LoginPermit(NetworkStream stream)
  90. {
  91. byte[] opcodeBuffer = new byte[1] { (byte)RealmLoginState.AuthLoginPermit };
  92. await stream.WriteAsync(opcodeBuffer, 0, opcodeBuffer.Length);
  93. string username = Username + new string(' ', 128 - Username.Length);
  94. byte[] usernameBuffer = System.Text.Encoding.Default.GetBytes(username);
  95. await stream.WriteAsync(usernameBuffer, 0, usernameBuffer.Length);
  96. MD5 md5 = new MD5CryptoServiceProvider();
  97. byte[] password = System.Text.Encoding.Default.GetBytes(Password);
  98. byte[] passMD5Buffer = md5.ComputeHash(password);
  99. string passMD5 = BitConverter.ToString(passMD5Buffer);
  100. passMD5 = passMD5.Replace("-", "");
  101. passMD5 = passMD5.ToLower();
  102. passMD5Buffer = System.Text.Encoding.Default.GetBytes(passMD5);
  103. await stream.WriteAsync(passMD5Buffer, 0, passMD5Buffer.Length);
  104. LogInfo += "username: " + username.Trim() + " password md5: " + passMD5 + Environment.NewLine;
  105. }
  106. }
  107. }