Exemplo n.º 1
0
        public void Start(Action <bool> startResult)
        {
            try
            {
                _serviceThread = new Thread(() =>
                {
                    var serverEndpoint = new IPEndPoint(IPAddress.Any, ServerPort);
                    var serverSocket   = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                    //  serverSocket.ReceiveTimeout = 3000;
                    serverSocket.Bind(serverEndpoint);
                    EndPoint client    = new IPEndPoint(IPAddress.Any, 0);
                    var dataFromRemote = new byte[512];

                    _touchCommandHandler              = new TouchCommandHandler();
                    _touchCommandHandler.WhoAmIEvent += (o, e) =>
                    {
                        serverSocket.SendTo(TouchCommandHandler.WrapLogicData(TouchCommandType.WhoAmIFromServer, new byte[0]), client);
                    };
                    _touchCommandHandler.DeviceConnected += (o, e) =>
                    {
                        _currentClient = e.DevicEndPoint;
                    };
                    _touchCommandHandler.DeviceDisconnected += (o, e) =>
                    {
                        _currentClient = null;
                    };
                    while (!_isServiceShutDown)
                    {
                        try
                        {
                            var receiveBytesCount = 0;
                            var endPoint          = client;            //TODO 分辨不同的客户端

                            receiveBytesCount = serverSocket.ReceiveFrom(dataFromRemote, ref endPoint);
                            client            = endPoint;
                            string data       = "";
                            int index         = 0;
                            dataFromRemote.ToList().ForEach(item =>
                            {
                                if (index < receiveBytesCount)
                                {
                                    data += item.ToString("X") + " ";
                                    index++;
                                }
                            });
                            Debug.WriteLine("Receive data: " + data + "  " + DateTime.Now.ToString("hh:mm:ss,fff"));
                            _touchCommandHandler.HandleRawDatagram(dataFromRemote, endPoint);
                        }
                        catch (Exception ex)
                        {
                            Debug.WriteLine(ex);
                        }
                    }
                });
                _serviceThread.IsBackground = true;
                _serviceThread.Start();
                startResult(true);
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex);
                startResult(false);
            }
        }
        public void Start(Action<bool> startResult)
        {
            try
            {
                _serviceThread = new Thread(() =>
                                     {
                                         var serverEndpoint = new IPEndPoint(IPAddress.Any, ServerPort);
                                         var serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                                       //  serverSocket.ReceiveTimeout = 3000;
                                         serverSocket.Bind(serverEndpoint);
                                         EndPoint client = new IPEndPoint(IPAddress.Any, 0);
                                         var dataFromRemote = new byte[512];

                                         _touchCommandHandler = new TouchCommandHandler();
                                         _touchCommandHandler.WhoAmIEvent += (o, e) =>
                                                                                 {
                                                                                     serverSocket.SendTo(TouchCommandHandler.WrapLogicData(TouchCommandType.WhoAmIFromServer, new byte[0]), client);
                                                                                 };
                                         _touchCommandHandler.DeviceConnected += (o, e) =>
                                                                                 {
                                                                                     _currentClient = e.DevicEndPoint;
                                                                                 };
                                         _touchCommandHandler.DeviceDisconnected += (o, e) =>
                                                                                    {
                                                                                        _currentClient = null;
                                                                                    };
                                         while (!_isServiceShutDown)
                                         {
                                             try
                                             {
                                                 var receiveBytesCount = 0;
                                                 var endPoint = client;//TODO 分辨不同的客户端

                                                 receiveBytesCount = serverSocket.ReceiveFrom(dataFromRemote, ref endPoint);
                                                 client = endPoint;
                                                 string data="";
                                                 int index = 0;
                                                 dataFromRemote.ToList().ForEach(item =>
                                                                                 {
                                                                                     if (index<receiveBytesCount)
                                                                                     {
                                                                                         data += item.ToString("X") + " ";
                                                                                         index++;
                                                                                     }

                                                                                 });
                                                 Debug.WriteLine("Receive data: " + data+"  " + DateTime.Now.ToString("hh:mm:ss,fff"));
                                                 _touchCommandHandler.HandleRawDatagram(dataFromRemote, endPoint);
                                             }
                                             catch (Exception ex)
                                             {
                                                 Debug.WriteLine(ex);
                                             }
                                         }
                                     });
                _serviceThread.IsBackground = true;
                _serviceThread.Start();
                startResult(true);
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex);
                startResult(false);
            }
        }