private static void ParseEnumCallback(IAsyncResult ar) { try { // Retrieve the state object and the handler socket // from the asynchronous state object. StateObject state = (StateObject)ar.AsyncState; // Read data from the remote device. if (state.workSocket.Connected) { int bytesRead = state.workSocket.EndReceive(ar); if (bytesRead > 0) { // There might be more data, so store the data received so far. state.resultBytes = state.resultBytes.Concat(state.buffer.Take(bytesRead).ToArray()).ToList(); if (state.resultBytes.Count < PackgeSize.LoginPackageSize / 2) { // Get the rest of the data. state.workSocket.BeginReceive(state.buffer, 0, PackgeSize.LoginPackageSize / 2, 0, new AsyncCallback(ParseConnectDataCallback), state); } else { // All the data has arrived; put it in response. BasicPackage package = SocketHelper.BytesToStruct<BasicPackage>(state.resultBytes.ToArray()); package.PID = SocketHelper.NetworkToHost(package.PID); package.CID = SocketHelper.NetworkToHost(package.CID); package.VER = SocketHelper.NetworkToHost(package.VER); state.resultBytes.Clear(); // Convert the string data to byte data using ASCII encoding. EnumPackage package2 = new EnumPackage(); package2.PID = SocketHelper.HostToNetwork((ushort)0x0000); package2.CID = SocketHelper.HostToNetwork(FuncCode.EnumAllData); package2.ST = 0; package2.UID = 0; package2.VER = SocketHelper.HostToNetwork((ushort)0x1000); package2.Count = SocketHelper.HostToNetwork((ushort)16); package2.RV = new byte[6] { 1, 2, 3, 4, 5, 6 }; byte[] commandBytes = SocketHelper.StructToBytes(package2); var byteData = commandBytes.Concat(PrepareDemoEnumData()).ToArray(); state.workSocket.BeginSend(byteData, 0, byteData.Length, 0, new AsyncCallback(SendEnumCallback), state); } } } } catch (Exception e) { Console.WriteLine(e.ToString()); } }
private static void ParseLoginDataCallback(IAsyncResult ar) { try { // Retrieve the state object and the handler socket // from the asynchronous state object. StateObject state = (StateObject)ar.AsyncState; // Read data from the remote device. if (state.workSocket.Connected) { int bytesRead = state.workSocket.EndReceive(ar); if (bytesRead > 0) { // There might be more data, so store the data received so far. state.resultBytes = state.resultBytes.Concat(state.buffer.Take(bytesRead)).ToList(); if (state.resultBytes.Count < PackgeSize.LoginPackageSize) { // Get the rest of the data. state.workSocket.BeginReceive(state.buffer, 0, PackgeSize.LoginPackageSize, 0, new AsyncCallback(ParseLoginDataCallback), state); } else { // All the data has arrived; put it in response. LoginPackage package = SocketHelper.BytesToStruct<LoginPackage>(state.resultBytes.ToArray()); package.PID = SocketHelper.NetworkToHost(package.PID); package.CID = SocketHelper.NetworkToHost(package.CID); package.VER = SocketHelper.NetworkToHost(package.VER); state.resultBytes.Clear(); //密码是否正确 if (package.Password.Trim() == password) { state.IsLogined = true; // Convert the string data to byte data using ASCII encoding. LoginResultPackage package2 = new LoginResultPackage(); package2.PID = SocketHelper.HostToNetwork((ushort)0x0000); package2.CID = SocketHelper.HostToNetwork(FuncCode.Login); package2.ST = 0; package2.UID = 0; package2.VER = SocketHelper.HostToNetwork((ushort)0x1000); package2.ERR = SocketHelper.HostToNetwork(ErrorCode.Succeed); package2.RV = SocketHelper.HostToNetwork(ErrorCode.Succeed); byte[] byteData = SocketHelper.StructToBytes(package2); state.workSocket.BeginSend(byteData, 0, byteData.Length, 0, new AsyncCallback(SendLoginResultCallback), state); } //关闭连接 else { LoginResultPackage package2 = new LoginResultPackage(); package2.PID = SocketHelper.HostToNetwork((ushort)0x0000); package2.CID = SocketHelper.HostToNetwork(FuncCode.Login); package2.ST = 1; package2.UID = 0; package2.VER = SocketHelper.HostToNetwork((ushort)0x1000); package2.ERR = SocketHelper.HostToNetwork(ErrorCode.Succeed); package2.RV = SocketHelper.HostToNetwork(ErrorCode.Succeed); byte[] byteData = SocketHelper.StructToBytes(package2); state.workSocket.BeginSend(byteData, 0, byteData.Length, 0, new AsyncCallback(SendLoginResultCallback), state); state.IsLogined = false; //关闭此次会话连接 state.workSocket.Shutdown(SocketShutdown.Both); state.workSocket.Close(); } } } else { state.workSocket.Shutdown(SocketShutdown.Both); state.workSocket.Close(); Thread.Sleep(100); StartClient(state.MachineId, state.IP, state.Port); } } } catch (Exception e) { Console.WriteLine(e.ToString()); } }
private static void ParseConnectDataCallback(IAsyncResult ar) { try { // Retrieve the state object and the handler socket // from the asynchronous state object. StateObject state = (StateObject)ar.AsyncState; // Read data from the remote device. if (state.workSocket.Connected) { int bytesRead = state.workSocket.EndReceive(ar); if (bytesRead > 0) { // There might be more data, so store the data received so far. state.resultBytes = state.resultBytes.Concat(state.buffer.Take(bytesRead).ToArray()).ToList(); if (state.resultBytes.Count < PackgeSize.EnsurePackageSize) { // Get the rest of the data. state.workSocket.BeginReceive(state.buffer, 0, PackgeSize.EnsurePackageSize, 0, new AsyncCallback(ParseConnectDataCallback), state); } else { // All the data has arrived; put it in response. EnsurePackage package = SocketHelper.BytesToStruct<EnsurePackage>(state.resultBytes.ToArray()); package.PID = SocketHelper.NetworkToHost(package.PID); package.CID = SocketHelper.NetworkToHost(package.CID); package.VER = SocketHelper.NetworkToHost(package.VER); package.Port = SocketHelper.NetworkToHost(package.Port); state.resultBytes.Clear(); //需要重定向 if (package.CID == FuncCode.Redirect) { //关闭此次会话连接 state.workSocket.Shutdown(SocketShutdown.Both); state.workSocket.Close(); StartClient(state.MachineCode, package.IPAddress, (int)package.Port); } //关闭连接 else if (package.CID == FuncCode.Close) { //关闭此次会话连接 state.workSocket.Shutdown(SocketShutdown.Both); state.workSocket.Close(); } else { // Convert the string data to byte data using ASCII encoding. MacBootstrapPackage package2 = new MacBootstrapPackage(); package2.PID = SocketHelper.HostToNetwork((ushort)0x0000); package2.CID = SocketHelper.HostToNetwork(FuncCode.Bootstrap); package2.ST = 0; package2.UID = 0; package2.VER = SocketHelper.HostToNetwork((ushort)0x1000); package2.DID = StringToByteArray(state.MachineCode, 32); byte[] byteData = SocketHelper.StructToBytes(package2); state.workSocket.BeginSend(byteData, 0, byteData.Length, 0, new AsyncCallback(SendMacInfoCallback), state); } } } } } catch (Exception e) { Console.WriteLine(e.ToString()); } }