private static void processKeys(ENUMS.SPECIALKEYS keys, int UPORDOWN)
        {
            byte key = (byte)Keys.None;
            switch (keys)
            {
                case ENUMS.SPECIALKEYS.ALT:
                    key = (byte)(Keys.Menu);
                    break;
                case ENUMS.SPECIALKEYS.ARROW_DOWN:
                    key = (byte)(Keys.Down);
                    break;
                case ENUMS.SPECIALKEYS.ARROW_LEFT:
                    key = (byte)(Keys.Left);
                    break;
                case ENUMS.SPECIALKEYS.ARROW_RIGHT:
                    key = (byte)(Keys.Right);
                    break;
                case ENUMS.SPECIALKEYS.ARROW_UP:
                    key = (byte)(Keys.Up);
                    break;
                case ENUMS.SPECIALKEYS.BACKSPACE:
                    key = (byte)(Keys.Back);
                    break;
                case ENUMS.SPECIALKEYS.CAPSLOCK:
                    key = (byte)(Keys.CapsLock);
                    break;
                case ENUMS.SPECIALKEYS.CTRL:
                    key = (byte)(Keys.ControlKey);
                    break;
                case ENUMS.SPECIALKEYS.DEL:
                    key = (byte)(Keys.Delete);
                    break;
                case ENUMS.SPECIALKEYS.END:
                    key = (byte)(Keys.End);
                    break;
                case ENUMS.SPECIALKEYS.ENTER:
                    key = (byte)(Keys.Enter);
                    break;
                case ENUMS.SPECIALKEYS.ESC:
                    key = (byte)(Keys.Escape);
                    break;
                case ENUMS.SPECIALKEYS.F1:
                    key = (byte)(Keys.F1);
                    break;
                case ENUMS.SPECIALKEYS.F10:
                    key = (byte)(Keys.F10);
                    break;
                case ENUMS.SPECIALKEYS.F11:
                    key = (byte)(Keys.F11);
                    break;
                case ENUMS.SPECIALKEYS.F12:
                    key = (byte)(Keys.F12);
                    break;
                case ENUMS.SPECIALKEYS.F2:
                    key = (byte)(Keys.F2);
                    break;
                case ENUMS.SPECIALKEYS.F3:
                    key = (byte)(Keys.F3);
                    break;
                case ENUMS.SPECIALKEYS.F4:
                    key = (byte)(Keys.F4);
                    break;
                case ENUMS.SPECIALKEYS.F5:
                    key = (byte)(Keys.F5);
                    break;
                case ENUMS.SPECIALKEYS.F6:
                    key = (byte)(Keys.F6);
                    break;
                case ENUMS.SPECIALKEYS.F7:
                    key = (byte)(Keys.F7);
                    break;
                case ENUMS.SPECIALKEYS.F8:
                    key = (byte)(Keys.F8);
                    break;
                case ENUMS.SPECIALKEYS.F9:
                    key = (byte)(Keys.F9);
                    break;
                case ENUMS.SPECIALKEYS.HOME:
                    key = (byte)(Keys.Home);
                    break;
                case ENUMS.SPECIALKEYS.INSERT:
                    key = (byte)(Keys.Insert);
                    break;
                case ENUMS.SPECIALKEYS.NUMLOCK:
                    key = (byte)(Keys.NumLock);
                    break;
                case ENUMS.SPECIALKEYS.PAGEDOWN:
                    key = (byte)(Keys.PageDown);
                    break;
                case ENUMS.SPECIALKEYS.PAGEUP:
                    key = (byte)(Keys.PageUp);
                    break;
                case ENUMS.SPECIALKEYS.PRTSC:
                    key = (byte)(Keys.PrintScreen);
                    break;
                case ENUMS.SPECIALKEYS.SHIFT:
                    key = (byte)(Keys.ShiftKey);
                    break;
                case ENUMS.SPECIALKEYS.SPACE:
                    key = (byte)(Keys.Space);
                    break;
                case ENUMS.SPECIALKEYS.TAB:
                    key = (byte)(Keys.Tab);
                    break;
                case ENUMS.SPECIALKEYS.WIN:
                    key = (byte)(Keys.LWin);
                    break;
                case ENUMS.SPECIALKEYS.GAME_A:
                    key = (byte)(A_button);
                    break;
                case ENUMS.SPECIALKEYS.GAME_B:
                    key = (byte)(B_button);
                    break;
                case ENUMS.SPECIALKEYS.GAME_C:
                    key = (byte)(C_button);
                    break;
                case ENUMS.SPECIALKEYS.GAME_D:
                    key = (byte)(D_button);
                    break;
                case ENUMS.SPECIALKEYS.GAME_DOWN:
                    key = (byte)(down_button);
                    break;
                case ENUMS.SPECIALKEYS.GAME_LEFT:
                    key = (byte)(left_button);
                    break;
                case ENUMS.SPECIALKEYS.GAME_OTHER1:
                    key = (byte)(Other1);
                    break;
                case ENUMS.SPECIALKEYS.GAME_OTHER2:
                    key = (byte)(Other2);
                    break;
                case ENUMS.SPECIALKEYS.GAME_OTHER3:
                    key = (byte)(Other3);
                    break;
                case ENUMS.SPECIALKEYS.GAME_OTHER4:
                    key = (byte)(Other4);
                    break;
                case ENUMS.SPECIALKEYS.GAME_RIGHT:
                    key = (byte)(right_button);
                    break;
                case ENUMS.SPECIALKEYS.GAME_START:
                    key = (byte)(Start);
                    break;
                case ENUMS.SPECIALKEYS.GAME_STOP:
                    key = (byte)(Stop);
                    break;
                case ENUMS.SPECIALKEYS.GAME_UP:
                    key = (byte)(up_button);
                    break;
                default:
                    break;

            }
            if (key == (byte)Keys.None) return;
            if (UPORDOWN == UP)
                keybd_event(key, MapVirtualKey(key, 0), KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
            else
                keybd_event(key, MapVirtualKey(key, 0), KEYEVENTF_EXTENDEDKEY | 0, 0);

        }
        public static void processCmd(ServerForm mainForm, BinaryReader reader, ENUMS.MESSAGETYPE messageType)
        {
            try
            {
                Console.WriteLine(messageType);
                switch (messageType)
                {
                       
                    case ENUMS.MESSAGETYPE.EXIT:
                        mainForm.stopClient();//disconnect socket
                        break;
                    case ENUMS.MESSAGETYPE.CODE:
                        int mesLen = big2Small(reader.ReadInt32());
                        byte[] msg = reader.ReadBytes(mesLen);
                        if (Encoding.UTF8.GetString(msg) != "小鸡炖蘑菇")
                        {
                            mainForm.stopClient();
                        }
                        break;
                    case ENUMS.MESSAGETYPE.FUN_LOCK:
                        LockWorkStation();//lock PC
                        break;
                    case ENUMS.MESSAGETYPE.FUN_LOGOUT:
                        DoExitWin(EWX_LOGOFF);//logout
                        break;
                    case ENUMS.MESSAGETYPE.FUN_MANAGER://open the task manager
                        ProcessStartInfo ps = new ProcessStartInfo();
                        ps.FileName = @"C:\WINDOWS\system32\taskmgr.exe";
                        Process.Start(ps);
                        break;
                    case ENUMS.MESSAGETYPE.FUN_RESTART:
                        DoExitWin(EWX_REBOOT);
                        break;
                    case ENUMS.MESSAGETYPE.FUN_SHOW_DESKTOP:
                        Type shellType = Type.GetTypeFromProgID("Shell.Application");
                        object shellObject = System.Activator.CreateInstance(shellType);
                        shellType.InvokeMember("ToggleDesktop", System.Reflection.BindingFlags.InvokeMethod, null, shellObject, null);
                        break;
                    case ENUMS.MESSAGETYPE.FUN_SHUTDOWN:
                        DoExitWin(EWX_SHUTDOWN | EWX_FORCE);
                        break;
                    case ENUMS.MESSAGETYPE.FUN_SHUTDOWN_CANCEL:
                        cancelShutdown();
                        break;
                    case ENUMS.MESSAGETYPE.FUN_SHUTDOWN_TIME:
                        int timeSpan = big2Small(reader.ReadInt32());//delay shutdown, int data,
                        shutDownTime(timeSpan);
                        break;
                    case ENUMS.MESSAGETYPE.FUN_SLEEP:
                        Application.SetSuspendState(PowerState.Hibernate, true, true);
                        break;
                    case ENUMS.MESSAGETYPE.HOST_NANME:
                        int len = big2Small(reader.ReadInt32());
                        byte[] message = reader.ReadBytes(len);
                        String msg2 = Encoding.UTF8.GetString(message);
                        mainForm.setMessageHost(msg2);
                        break;
                    case ENUMS.MESSAGETYPE.KEY_DOWN:
                        ENUMS.SPECIALKEYS key = (ENUMS.SPECIALKEYS)reader.ReadByte();
                        processKeys(key, DOWN);
                        break;
                    case ENUMS.MESSAGETYPE.KEY_UP:
                        ENUMS.SPECIALKEYS key2 = (ENUMS.SPECIALKEYS)reader.ReadByte();
                        processKeys(key2, UP);
                        break;
                    case ENUMS.MESSAGETYPE.MOUSE_LEFT_CLICK:
                        mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                        break;
                    case ENUMS.MESSAGETYPE.MOUSE_LEFT_DOUBLE_CLICK:
                        //双击左键
                        mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                        Thread.Sleep(100);
                        mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                        break;
                    case ENUMS.MESSAGETYPE.MOUSE_LEFT_DOWN:
                        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
                        break;
                    case ENUMS.MESSAGETYPE.MOUSE_LEFT_UP:
                        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                        break;
                    case ENUMS.MESSAGETYPE.MOUSE_MOVE:
                        int xdis = big2Small(reader.ReadInt32());
                        int ydis = big2Small(reader.ReadInt32());
                        mouse_event(MOUSEEVENTF_MOVE, xdis, ydis, 0, 0);
                        break;
                    case ENUMS.MESSAGETYPE.MOUSE_RIGHT_CLICK:
                        mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
                        Thread.Sleep(100);
                        mouse_event( MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
                        break;
                    case ENUMS.MESSAGETYPE.MOUSE_RIGHT_DOUBLE_CLICK:
                        //双击右键
                        mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
                        Thread.Sleep(100);
                        mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
                        break;
                    case ENUMS.MESSAGETYPE.MOUSE_RIGHT_DOWN:
                        mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
                        break;
                    case ENUMS.MESSAGETYPE.MOUSE_RIGHT_UP:
                        mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
                        break;
                    case ENUMS.MESSAGETYPE.MOUSE_WHEEL:
                        int wheel = big2Small(reader.ReadInt32());
                        mouse_event(MOUSEEVENTF_WHEEL, 0, 0, wheel, 0);
                        break;
                    case ENUMS.MESSAGETYPE.MOUSE_SET:
                        int xPoint = big2Small(reader.ReadInt32());
                        int yPoint = big2Small(reader.ReadInt32());
                        //mouse_event(MOUSEEVENTF_ABSOLUTE, xPoint, yPoint, 0, 0);
                        SetCursorPos(xPoint, yPoint);
                        break;
                    case ENUMS.MESSAGETYPE.START_PIC:
                        mainForm.startSendPicFlags();
                        break;
                    case ENUMS.MESSAGETYPE.STOP_PIC:
                        mainForm.stopSendPicFlags();
                        break;
                    case ENUMS.MESSAGETYPE.TEXT:
                        int textLen = big2Small(reader.ReadInt32());
                        byte[] textByte = reader.ReadBytes(textLen);
                        SendKeys.SendWait(Encoding.UTF8.GetString(textByte));
                        break;
                    case ENUMS.MESSAGETYPE.BOARDKEY_DOWN:
                        byte keyDown = reader.ReadByte();
                        keybd_event(keyDown, MapVirtualKey(keyDown, 0), KEYEVENTF_EXTENDEDKEY | 0, 0);
                        break;
                    case ENUMS.MESSAGETYPE.BOARDKEY_UP:
                        byte keyUp = reader.ReadByte();
                        keybd_event(keyUp, MapVirtualKey(keyUp, 0), KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
                        break;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                throw new Exception("client is closed");
            }

        }