示例#1
0
        private async void InitializeInternal()
        {
            mInitializationCancelTokenSource = new CancellationTokenSource(ACCEPTANCE_TIMEOUT);

            try
            {
                var serviceProviderResult = await GattServiceProvider.CreateAsync(mServiceUUID).AsTask(mInitializationCancelTokenSource.Token);

                if (serviceProviderResult.Error != BluetoothError.Success)
                {
                    Utils.Error("failed to create service provider: {0}", serviceProviderResult.Error.ToString());

                    if (serviceProviderResult.Error == BluetoothError.RadioNotAvailable)
                    {
                        mCallback.OnBluetoothRequire();
                    }

                    HandleError();
                    return;
                }

                mServiceProvider = serviceProviderResult.ServiceProvider;
                mServiceProvider.AdvertisementStatusChanged += OnAdvertisementStatusChanged;

                var uploadParameters = new GattLocalCharacteristicParameters()
                {
                    CharacteristicProperties = GattCharacteristicProperties.Write,
                };

                var uploadCharacteristicResult = await mServiceProvider.Service.CreateCharacteristicAsync(mUploadUUID, uploadParameters).
                                                 AsTask(mInitializationCancelTokenSource.Token);

                if (uploadCharacteristicResult.Error != BluetoothError.Success)
                {
                    Utils.Error("failed to create uploading characteristic: {0}", uploadCharacteristicResult.Error.ToString());
                    HandleError();
                    return;
                }

                mUploadCharacteristic = uploadCharacteristicResult.Characteristic;
                mUploadCharacteristic.WriteRequested += OnCharacteristicWriteRequested;

                var downloadParameters = new GattLocalCharacteristicParameters
                {
                    CharacteristicProperties = GattCharacteristicProperties.Read | GattCharacteristicProperties.Indicate,
                };

                var downloadCharacteristicResult = await mServiceProvider.Service.CreateCharacteristicAsync(mDownloadUUID, downloadParameters).
                                                   AsTask(mInitializationCancelTokenSource.Token);

                if (downloadCharacteristicResult.Error != BluetoothError.Success)
                {
                    Utils.Error("failed to create downloading characteristic: {0}", downloadCharacteristicResult.Error.ToString());
                    HandleError();
                    return;
                }

                mDownloadCharacteristic = downloadCharacteristicResult.Characteristic;
                mDownloadCharacteristic.SubscribedClientsChanged += OnCharacteristicSubscribedClientsChanged;
                mDownloadCharacteristic.ReadRequested            += OnCharacteristicReadRequested;
            }
            catch (OperationCanceledException)
            {
                Utils.Info("canceled");
                HandleError();
                return;
            }
            catch (Exception e)
            {
                Utils.Error(e.ToString());
                HandleError();
                return;
            }

            lock (mLockObject)
            {
                SetStatus(Status.Ready);

                mCallback.OnReady();
            }
        }