public MainWindow() { string methodMD5 = "43DFFFDA19287556"; try { log = new LogFile(".\\工具日志.log"); log.Generate(methodMD5 + " 进入"); InitializeComponent(); gameData = new GameData(); GamePanel.DataContext = gameData; #if DEBUG gameData.Line = 0; #else gameData.Line = 0; #endif sendData = new List <byte>(); MD5 md5 = MD5.Create(); byte[] hash = md5.ComputeHash(Encoding.UTF8.GetBytes(CCSystemInfo.GetMacAddress() + CCSystemInfo.GetCpuID())); StringBuilder sb = new StringBuilder(); foreach (byte b in hash) { _ = sb.Append(b.ToString("X2")); } machineIdentity = CCSerializeTool.StringToByte(sb.ToString()); client = new CCSocketClient(); client.OnConnectedEvent += Client_OnConnectedEvent; client.OnConnectionBreakEvent += Client_OnConnectionBreakEvent; client.OnReceivePackageEvent += Client_OnReceivePackageEvent; client.OnSocketExceptionEvent += Client_OnSocketExceptionEvent; connectTimer = new Timer(); connectTimer.Elapsed += ConnectTimer_Elapsed; connectTimer.AutoReset = false; sendBaseInfoTimer = new Timer(); sendBaseInfoTimer.Elapsed += SendBaseInfoTimer_Elapsed;; sendBaseInfoTimer.AutoReset = false; sendBaseInfoTimer.Interval = 3000; pingTimer = new Timer(); pingTimer.Elapsed += PingTimer_Elapsed; pingTimer.Interval = 150; pingTimer.AutoReset = true; Connect(); } catch (Exception exception) { log.Generate(methodMD5 + " 异常,异常信息:" + exception.Message); log.Flush(); throw; } finally { log.Generate(methodMD5 + " 退出"); } }
private void TextBox_SourceUpdated_3(object sender, DataTransferEventArgs e) { string methodMD5 = "7CF22B3EA1783029"; try { log.Generate(methodMD5 + " 进入"); client.SendPackage(5, CCSerializeTool.StringToByte(gameData.No4Qin)); } catch (Exception exception) { log.Generate(methodMD5 + " 异常,异常信息:" + exception.Message); log.Flush(); throw; } finally { log.Generate(methodMD5 + " 退出"); } }
private void SendBaseInfoTimer_Elapsed(object sender, ElapsedEventArgs e) { string methodMD5 = "B5BE9A7B29C08AD2"; try { log.Generate(methodMD5 + " 进入"); if (gameData.SendInfoSuccess) { lock (sendData) { sendData.Clear(); if (startPing == false) { lastPing = Environment.TickCount; startPing = true; CCSerializeTool.IntToByteList(lastPing, sendData); } else { CCSerializeTool.IntToByteList(Environment.TickCount, sendData); } client.SendPackage(1, sendData.ToArray()); } } else { lock (sendData) { sendData.Clear(); CCSerializeTool.IntToByteList(gameData.Line, sendData); sendData.AddRange(machineIdentity); CCSerializeTool.StringToByteList(CCProcessInfo.GetProcessPath(GetWuXiaProcess()), sendData); client.SendPackage(0, sendData.ToArray()); } } sendBaseInfoTimer.Start(); } catch (Exception exception) { log.Generate(methodMD5 + " 异常,异常信息:" + exception.Message); log.Flush(); throw; } finally { log.Generate(methodMD5 + " 退出"); } }
private void OneKey11_MouseDown(object sender, MouseButtonEventArgs e) { string methodMD5 = "78A7758259355E5D"; try { log.Generate(methodMD5 + " 进入"); if (e.ChangedButton == MouseButton.Left) { client.SendPackage(6, CCSerializeTool.IntToByte(11)); } else if (e.ChangedButton == MouseButton.Right) { client.SendPackage(7, CCSerializeTool.IntToByte(11)); } } catch (Exception exception) { log.Generate(methodMD5 + " 异常,异常信息:" + exception.Message); log.Flush(); throw; } finally { log.Generate(methodMD5 + " 退出"); } }
private void Hook_KeyDownEvent(CCKeyCode keyCode) { switch (keyCode) { case CCKeyCode.VK_LCONTROL: ctrlState = true; break; case CCKeyCode.Numeric1: gameData[0].LogLock.EnterWriteLock(); try { LinkedListNode <LogDetail> node = PopLog(0); node.Value.Content = "数字键 1被按下," + (ctrlState ? "按下了ctrl。" : "没按ctrl。"); node.Value.Time = Environment.TickCount; gameData[0].Log.AddLast(node); } finally { gameData[0].LogLock.ExitWriteLock(); } if (ctrlState) { if (gameData[0].HitQinKeyLength < gameData[0].HitQinKey.Length) { gameData[0].HitQinKey[gameData[0].HitQinKeyLength++] = 1; } gameData[0].ClientInfoLock.EnterReadLock(); try { foreach (UserInfo userInfo in gameData[0].ClientInfo) { server.SendPackage(userInfo.Id, 2, gameData[0].HitQinKey); } } finally { gameData[0].ClientInfoLock.ExitReadLock(); } } break; case CCKeyCode.Numeric2: gameData[0].LogLock.EnterWriteLock(); try { LinkedListNode <LogDetail> node = PopLog(0); node.Value.Content = "数字键 2被按下," + (ctrlState ? "按下了ctrl。" : "没按ctrl。"); node.Value.Time = Environment.TickCount; gameData[0].Log.AddLast(node); } finally { gameData[0].LogLock.ExitWriteLock(); } if (ctrlState) { if (gameData[0].HitQinKeyLength < gameData[0].HitQinKey.Length) { gameData[0].HitQinKey[gameData[0].HitQinKeyLength++] = 2; } gameData[0].ClientInfoLock.EnterReadLock(); try { foreach (UserInfo userInfo in gameData[0].ClientInfo) { server.SendPackage(userInfo.Id, 2, gameData[0].HitQinKey); } } finally { gameData[0].ClientInfoLock.ExitReadLock(); } } break; case CCKeyCode.Numeric3: gameData[0].LogLock.EnterWriteLock(); try { LinkedListNode <LogDetail> node = PopLog(0); node.Value.Content = "数字键 3被按下," + (ctrlState ? "按下了ctrl。" : "没按ctrl。"); node.Value.Time = Environment.TickCount; gameData[0].Log.AddLast(node); } finally { gameData[0].LogLock.ExitWriteLock(); } if (ctrlState) { if (gameData[0].HitQinKeyLength < gameData[0].HitQinKey.Length) { gameData[0].HitQinKey[gameData[0].HitQinKeyLength++] = 3; } gameData[0].ClientInfoLock.EnterReadLock(); try { foreach (UserInfo userInfo in gameData[0].ClientInfo) { server.SendPackage(userInfo.Id, 2, gameData[0].HitQinKey); } } finally { gameData[0].ClientInfoLock.ExitReadLock(); } } break; case CCKeyCode.Numeric4: gameData[0].LogLock.EnterWriteLock(); try { LinkedListNode <LogDetail> node = PopLog(0); node.Value.Content = "数字键 4被按下," + (ctrlState ? "按下了ctrl。" : "没按ctrl。"); node.Value.Time = Environment.TickCount; gameData[0].Log.AddLast(node); } finally { gameData[0].LogLock.ExitWriteLock(); } if (ctrlState) { if (gameData[0].HitQinKeyLength < gameData[0].HitQinKey.Length) { gameData[0].HitQinKey[gameData[0].HitQinKeyLength++] = 4; } gameData[0].ClientInfoLock.EnterReadLock(); try { foreach (UserInfo userInfo in gameData[0].ClientInfo) { server.SendPackage(userInfo.Id, 2, gameData[0].HitQinKey); } } finally { gameData[0].ClientInfoLock.ExitReadLock(); } } break; case CCKeyCode.Numeric5: gameData[0].LogLock.EnterWriteLock(); try { LinkedListNode <LogDetail> node = PopLog(0); node.Value.Content = "数字键 5被按下," + (ctrlState ? "按下了ctrl。" : "没按ctrl。"); node.Value.Time = Environment.TickCount; gameData[0].Log.AddLast(node); } finally { gameData[0].LogLock.ExitWriteLock(); } if (ctrlState) { if (gameData[0].HitQinKeyLength < gameData[0].HitQinKey.Length) { gameData[0].HitQinKey[gameData[0].HitQinKeyLength++] = 5; } gameData[0].ClientInfoLock.EnterReadLock(); try { foreach (UserInfo userInfo in gameData[0].ClientInfo) { server.SendPackage(userInfo.Id, 2, gameData[0].HitQinKey); } } finally { gameData[0].ClientInfoLock.ExitReadLock(); } } break; case CCKeyCode.Numeric7: if (ctrlState) { gameData[0].LogLock.EnterWriteLock(); try { LinkedListNode <LogDetail> node = PopLog(0); node.Value.Content = "补弦清屏---------------------"; node.Value.Time = Environment.TickCount; gameData[0].Log.AddLast(node); } finally { gameData[0].LogLock.ExitWriteLock(); } gameData[0].No1Qin = gameData[0].No2Qin = gameData[0].No3Qin = gameData[0].No4Qin = ""; for (int i = 0; i < gameData[0].HitQinKey.Length; i++) { gameData[0].HitQinKey[i] = 0; } gameData[0].HitQinKeyLength = 0; for (int i = 0; i < 12; i++) { gameData[0].QinKey[i] = 0; } gameData[0].ClientInfoLock.EnterReadLock(); try { byte[] intByte = new byte[4]; foreach (UserInfo userInfo in gameData[0].ClientInfo) { CCSerializeTool.IntToByte(userInfo.Id, intByte, 0); server.SendPackage(userInfo.Id, 3, intByte); } } finally { gameData[0].ClientInfoLock.ExitReadLock(); } } break; default: break; } }
private void Server_OnReceivePackageEvent(int id, int signal, byte[] buffer, object userToken) { if (userToken is LinkedListNode <UserInfo> userInfoNode) { UserInfo userInfo = userInfoNode.Value; userInfo.LastReceiveTime = DateTime.Now; int startIndex = 0; byte[] data; switch (signal) { case 0: int line = CCSerializeTool.ByteToInt(buffer, ref startIndex); lock (gameData) { int i = 0; for (; i < gameData.Count; i++) { if (line == gameData[i].Line) { if (userInfo.Line != i) { gameData[userInfo.Line].ClientInfoLock.EnterWriteLock(); try { gameData[userInfo.Line].ClientInfo.Remove(userInfoNode); } finally { gameData[userInfo.Line].ClientInfoLock.ExitWriteLock(); } userInfo.Line = i; gameData[userInfo.Line].ClientInfoLock.EnterWriteLock(); try { gameData[userInfo.Line].ClientInfo.AddLast(userInfoNode); } finally { gameData[userInfo.Line].ClientInfoLock.ExitWriteLock(); } } break; } } if (i == gameData.Count) { gameData.Add(new GameData() { Line = line }); gameData[userInfo.Line].ClientInfoLock.EnterWriteLock(); try { gameData[userInfo.Line].ClientInfo.Remove(userInfoNode); } finally { gameData[userInfo.Line].ClientInfoLock.ExitWriteLock(); } userInfo.Line = i; gameData[userInfo.Line].ClientInfoLock.EnterWriteLock(); try { gameData[userInfo.Line].ClientInfo.AddLast(userInfoNode); } finally { gameData[userInfo.Line].ClientInfoLock.ExitWriteLock(); } } } userInfo.MachineIdentity = CCSerializeTool.ByteToString(buffer, ref startIndex); userInfo.GamePath = CCSerializeTool.ByteToString(buffer, ref startIndex); lock (sendData) { sendData.Clear(); CCSerializeTool.IntToByteList(userInfo.Id, sendData); CCSerializeTool.StringToByteList(gameData[userInfo.Line].No1Qin, sendData); CCSerializeTool.StringToByteList(gameData[userInfo.Line].No2Qin, sendData); CCSerializeTool.StringToByteList(gameData[userInfo.Line].No3Qin, sendData); CCSerializeTool.StringToByteList(gameData[userInfo.Line].No4Qin, sendData); for (int i = 0; i < gameData[userInfo.Line].QinKey.Count; i++) { CCSerializeTool.IntToByteList(gameData[userInfo.Line].QinKey[i], sendData); } sendData.AddRange(gameData[userInfo.Line].HitQinKey); server.SendPackage(id, 0, sendData.ToArray()); } break; case 1: if (userInfo.GamePath.Equals("") || userInfo.MachineIdentity.Equals("")) { server.SendPackage(id, 4, buffer); } else { server.SendPackage(id, 1, buffer); } break; case 2: gameData[userInfo.Line].No1Qin = CCSerializeTool.ByteToString(buffer, ref startIndex); gameData[userInfo.Line].ClientInfoLock.EnterReadLock(); try { foreach (UserInfo tempUserInfo in gameData[userInfo.Line].ClientInfo) { if (tempUserInfo.Id != id) { server.SendPackage(tempUserInfo.Id, 5, buffer); } } } finally { gameData[userInfo.Line].ClientInfoLock.ExitReadLock(); } GenerateLog(userInfo.Line, userInfo.Remark + " 修改一号琴缺弦为:" + gameData[userInfo.Line].No1Qin); break; case 3: gameData[userInfo.Line].No2Qin = CCSerializeTool.ByteToString(buffer, ref startIndex); gameData[userInfo.Line].ClientInfoLock.EnterReadLock(); try { foreach (UserInfo tempUserInfo in gameData[userInfo.Line].ClientInfo) { if (tempUserInfo.Id != id) { server.SendPackage(tempUserInfo.Id, 6, buffer); } } } finally { gameData[userInfo.Line].ClientInfoLock.ExitReadLock(); } GenerateLog(userInfo.Line, userInfo.Remark + " 修改二号琴缺弦为:" + gameData[userInfo.Line].No2Qin); break; case 4: gameData[userInfo.Line].No3Qin = CCSerializeTool.ByteToString(buffer, ref startIndex); gameData[userInfo.Line].ClientInfoLock.EnterReadLock(); try { foreach (UserInfo tempUserInfo in gameData[userInfo.Line].ClientInfo) { if (tempUserInfo.Id != id) { server.SendPackage(tempUserInfo.Id, 7, buffer); } } } finally { gameData[userInfo.Line].ClientInfoLock.ExitReadLock(); } GenerateLog(userInfo.Line, userInfo.Remark + " 修改三号琴缺弦为:" + gameData[userInfo.Line].No3Qin); break; case 5: gameData[userInfo.Line].No4Qin = CCSerializeTool.ByteToString(buffer, ref startIndex); gameData[userInfo.Line].ClientInfoLock.EnterReadLock(); try { foreach (UserInfo tempUserInfo in gameData[userInfo.Line].ClientInfo) { if (tempUserInfo.Id != id) { server.SendPackage(tempUserInfo.Id, 8, buffer); } } } finally { gameData[userInfo.Line].ClientInfoLock.ExitReadLock(); } GenerateLog(userInfo.Line, userInfo.Remark + " 修改四号琴缺弦为:" + gameData[userInfo.Line].No4Qin); break; case 6: lock (sendData) { sendData.Clear(); int keyIndex = CCSerializeTool.ByteToInt(buffer, ref startIndex); for (int i = 0; i < gameData[userInfo.Line].QinKey.Count; i++) { if (i != keyIndex) { if (gameData[userInfo.Line].QinKey[i] == userInfo.Id) { gameData[userInfo.Line].QinKey[i] = 0; } } else { if (gameData[userInfo.Line].QinKey[i] == 0) { gameData[userInfo.Line].QinKey[i] = userInfo.Id; GenerateLog(userInfo.Line, userInfo.Remark + " 补 " + keyIndex.ToString() + " 琴弦。"); } else if (gameData[userInfo.Line].QinKey[i] == userInfo.Id) { gameData[userInfo.Line].QinKey[i] = 0; GenerateLog(userInfo.Line, userInfo.Remark + " 放弃补 " + keyIndex.ToString() + " 琴弦。"); } else { GenerateLog(userInfo.Line, userInfo.Remark + " 尝试补 " + keyIndex.ToString() + " 琴弦但冲突。"); } } CCSerializeTool.IntToByteList(gameData[userInfo.Line].QinKey[i], sendData); } CCSerializeTool.IntToByteList(keyIndex, sendData); data = sendData.ToArray(); } gameData[userInfo.Line].ClientInfoLock.EnterReadLock(); try { foreach (UserInfo tempUserInfo in gameData[userInfo.Line].ClientInfo) { if (tempUserInfo.Id != id) { server.SendPackage(tempUserInfo.Id, 9, data, 0, 48); } else { server.SendPackage(tempUserInfo.Id, 10, data); } } } finally { gameData[userInfo.Line].ClientInfoLock.ExitReadLock(); } break; case 7: lock (sendData) { sendData.Clear(); int keyIndex = CCSerializeTool.ByteToInt(buffer, ref startIndex); for (int i = 0; i < gameData[userInfo.Line].QinKey.Count; i++) { if (i == keyIndex) { if (gameData[userInfo.Line].QinKey[i] == 0) { gameData[userInfo.Line].QinKey[i] = userInfo.Id; GenerateLog(userInfo.Line, userInfo.Remark + " 强制补 " + keyIndex.ToString() + " 琴弦。"); } else { gameData[userInfo.Line].QinKey[i] = 0; GenerateLog(userInfo.Line, userInfo.Remark + " 强制取消补 " + keyIndex.ToString() + " 琴弦。"); } } CCSerializeTool.IntToByteList(gameData[userInfo.Line].QinKey[i], sendData); } CCSerializeTool.IntToByteList(keyIndex, sendData); data = sendData.ToArray(); } gameData[userInfo.Line].ClientInfoLock.EnterReadLock(); try { foreach (UserInfo tempUserInfo in gameData[userInfo.Line].ClientInfo) { if (tempUserInfo.Id != id) { server.SendPackage(tempUserInfo.Id, 9, data, 0, 48); } else { server.SendPackage(tempUserInfo.Id, 10, data); } } } finally { gameData[userInfo.Line].ClientInfoLock.ExitReadLock(); } break; case 8: userInfo.MachineIdentity = CCSerializeTool.ByteToString(buffer, ref startIndex); userInfo.GamePath = CCSerializeTool.ByteToString(buffer, ref startIndex); break; default: break; } } }
private void Client_OnReceivePackageEvent(int signal, byte[] buffer) { string methodMD5 = "3C8905B3EE89BB1A"; try { log.Generate(methodMD5 + " 进入"); int startIndex = 0; int ping; switch (signal) { case 0: gameData.SendInfoSuccess = true; int licence = CCSerializeTool.ByteToInt(buffer, ref startIndex); if (!gameData.Licence.Contains(licence)) { gameData.Licence.Add(licence); } gameData.No1Qin = CCSerializeTool.ByteToString(buffer, ref startIndex); gameData.No2Qin = CCSerializeTool.ByteToString(buffer, ref startIndex); gameData.No3Qin = CCSerializeTool.ByteToString(buffer, ref startIndex); gameData.No4Qin = CCSerializeTool.ByteToString(buffer, ref startIndex); for (int i = 0; i < 12; i++) { gameData.QinKey[i] = CCSerializeTool.ByteToInt(buffer, ref startIndex); } gameData.QinKey = gameData.QinKey; for (int i = 0; i < gameData.HitQinKey.Length; i++) { gameData.HitQinKey[i] = buffer[startIndex++]; } gameData.HitQinKey = gameData.HitQinKey; pingTimer.Start(); break; case 1: ping = Environment.TickCount - CCSerializeTool.ByteToInt(buffer, ref startIndex); startPing = false; gameData.Ping = ping > 9999 ? 9999 : (ping < 0 ? 9999 : ping); break; case 2: for (int i = 0; i < gameData.HitQinKey.Length; i++) { gameData.HitQinKey[i] = buffer[startIndex++]; } gameData.HitQinKey = gameData.HitQinKey; break; case 3: gameData.Licence.Clear(); gameData.Licence.Add(CCSerializeTool.ByteToInt(buffer, ref startIndex)); gameData.No1Qin = gameData.No2Qin = gameData.No3Qin = gameData.No4Qin = ""; for (int i = 0; i < gameData.QinKey.Count; i++) { gameData.QinKey[i] = 0; } gameData.QinKey = gameData.QinKey; for (int i = 0; i < gameData.HitQinKey.Length; i++) { gameData.HitQinKey[i] = 0; } gameData.HitQinKey = gameData.HitQinKey; gameData.HitKeyIndex = 0; break; case 4: ping = Environment.TickCount - CCSerializeTool.ByteToInt(buffer, ref startIndex); startPing = false; gameData.Ping = ping > 9999 ? 9999 : (ping < 0 ? 9999 : ping); lock (sendData) { sendData.Clear(); sendData.AddRange(machineIdentity); CCSerializeTool.StringToByteList(CCProcessInfo.GetProcessPath(GetWuXiaProcess()), sendData); client.SendPackage(8, sendData.ToArray()); } break; case 5: gameData.No1Qin = CCSerializeTool.ByteToString(buffer, ref startIndex); break; case 6: gameData.No2Qin = CCSerializeTool.ByteToString(buffer, ref startIndex); break; case 7: gameData.No3Qin = CCSerializeTool.ByteToString(buffer, ref startIndex); break; case 8: gameData.No4Qin = CCSerializeTool.ByteToString(buffer, ref startIndex); break; case 9: for (int i = 0; i < 12; i++) { gameData.QinKey[i] = CCSerializeTool.ByteToInt(buffer, ref startIndex); } gameData.QinKey = gameData.QinKey; break; case 10: for (int i = 0; i < 12; i++) { gameData.QinKey[i] = CCSerializeTool.ByteToInt(buffer, ref startIndex); } gameData.QinKey = gameData.QinKey; int keyIndex = CCSerializeTool.ByteToInt(buffer, ref startIndex); if (!gameData.Licence.Contains(gameData.QinKey[keyIndex])) { SystemSounds.Asterisk.Play(); Dispatcher.Invoke(() => { Storyboard Storyboard1 = FindResource("Storyboard1") as Storyboard; Storyboard1.Stop(); Storyboard.SetTargetName(Storyboard1, "OneKey" + keyIndex.ToString()); Storyboard1.Begin(); }); } break; default: break; } } catch (Exception exception) { log.Generate(methodMD5 + " 异常,异常信息:" + exception.Message); log.Flush(); throw; } finally { log.Generate(methodMD5 + " 退出"); } }