Пример #1
0
 static void Main()
 {
     //AllocConsole();
     //Console.WriteLine("DEBUG");
     Application.EnableVisualStyles();
     Application.SetCompatibleTextRenderingDefault(false);
     Press.Init();
     Application.Run(new MainForm());
     //Press.destroy();
     //FreeConsole();
 }
Пример #2
0
        private void ServerThread()
        {
            //此服务同一时间只接受一个客户端的请求 1对1
            byte[] received;
            while (!ClientConnected && !quit)
            {
                received = new byte[200];
                try
                {
                    conn = bluetoothListener.AcceptBluetoothClient();//等待客户端连接
                }
                catch (Exception) { break; }
                stream = conn.GetStream();
                Msg("客户端上线");
                DeviceInfo("未知");
                //首次连接等待客户端发送连接指令
                stream.Read(received, 0, received.Length);
                String tmp = Encoding.UTF8.GetString(received);
                String str = "GamePadAndroid";
                tmp = tmp.Substring(0, 14);
                //Msg(tmp);
                if (tmp != str)
                {
                    Msg("未收到客户端对接指令或已断开连接");
                    if (stream != null)
                    {
                        stream.Close();
                    }
                    if (conn != null)
                    {
                        conn.Close();
                    }
                    continue;
                }
                else
                {
                    DeviceInfo(tmp);
                    //收到正确指令,发送确认报文
                    byte[] sent = Encoding.UTF8.GetBytes("GamePadPC");
                    stream.Write(sent, 0, sent.Length);
                    //stream.Flush();
                    Msg("已连接");
                    ClientConnected = true;
                    while (!quit)
                    {
                        try
                        {
                            //这一段基本没用,断开连接了也判断不出来

                            /**if (!conn.Connected || !stream.CanRead || !stream.CanWrite)
                             *  throw new IOException("client disconnect");*/
                            received = new byte[200];
                            stream.Read(received, 0, received.Length);
                            String rec = Encoding.UTF8.GetString(received);
                            String t   = rec.Substring(0, 1);
                            //客户端断开连接后会导致在缓冲区一直读空数据"\0"
                            if (t == "\0")
                            {
                                throw new IOException("client disconnect");
                            }
                            rec.TrimEnd('\0');
                            //todo 这里执行按键操作,后期用队列实现
                            if (t != "_" && running)
                            {
                                //Thread thread = new Thread(new ParameterizedThreadStart(Press.Run));
                                //thread.Start(rec);
                                Press.Run(rec);
                            }
                            Msg(rec);
                        }
                        catch (IOException)
                        {
                            ClientConnected = false;
                            Msg("客户端断开连接");
                            DeviceInfo("无连接");
                            new Task(() =>
                            {
                                MethodInvoker methodInvoker = new MethodInvoker(() =>
                                {
                                    if (WindowState == FormWindowState.Minimized)
                                    {
                                        //弹出窗口
                                        Run();
                                        WindowState        = FormWindowState.Normal;
                                        this.ShowInTaskbar = true;
                                    }
                                });
                                this.BeginInvoke(methodInvoker);
                            }).Start();

                            stream.Close();
                            conn.Close();
                            break;
                        }
                    }
                }
            }
        }