Ejemplo n.º 1
0
        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());
            }
        }
Ejemplo n.º 2
0
        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());
            }
        }
Ejemplo n.º 3
0
        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());
            }
        }