Files

155 lines
4.4 KiB
C#

// 32feet.NET - Personal Area Networking for .NET
//
// Copyright (c) 2013 Alan J McFarlane, All rights reserved.
// Copyright (c) 2013 In The Hand Ltd, All rights reserved.
// This source code is licensed under the MIT License
#if ANDROID_BTH
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using InTheHand.Net.Bluetooth.Factory;
using Android.Bluetooth;
namespace InTheHand.Net.Bluetooth.Droid
{
sealed class AndroidBthFactory : AndroidBthFactoryBase
{
public AndroidBthFactory()
: base(GetDefaultAdapter())
{
}
static BluetoothAdapter GetDefaultAdapter()
{
var a = BluetoothAdapter.DefaultAdapter;
if (a == null) throw new InvalidOperationException("No Android Bluetooth radio.");
return a;
}
}
#if DEBUG
[CLSCompliant(false)]
public
#endif
abstract class AndroidBthFactoryBase : BluetoothFactory
{
AndroidBthRadio _radio;
//--
protected AndroidBthFactoryBase(BluetoothAdapter adapter)
{
if (adapter == null) throw new ArgumentNullException("adapter");
_radio = new AndroidBthRadio(adapter);
}
//--
internal BluetoothAdapter GetAdapter()
{
return _radio.Adapter;
}
internal AndroidBthInquiry GetInquiry()
{
return new AndroidBthInquiry(this);
}
//--
protected override IBluetoothRadio GetPrimaryRadio()
{
return _radio;
}
protected override IBluetoothRadio[] GetAllRadios()
{
var arr = new IBluetoothRadio[1];
arr[0] = GetPrimaryRadio();
return arr;
}
//--
protected override IBluetoothDeviceInfo GetBluetoothDeviceInfo(BluetoothAddress address)
{
return AndroidBthDeviceInfo.CreateFromGivenAddress(this, address, true);
}
internal AndroidBthDeviceInfo DoGetBluetoothDeviceInfoInternalOnly(BluetoothAddress address)
{
return AndroidBthDeviceInfo.CreateFromGivenAddress(this, address, false);
}
//--
protected override IBluetoothClient GetBluetoothClient()
{
return new AndroidBthClient(this);
}
protected override IBluetoothClient GetBluetoothClient(BluetoothEndPoint localEP)
{
throw new NotImplementedException();
}
protected override IBluetoothClient GetBluetoothClient(System.Net.Sockets.Socket acceptedSocket)
{
throw new NotSupportedException();
}
protected internal virtual IBluetoothClient DoGetBluetoothClientForListener(BluetoothSocket sock)
{
return AndroidBthClient.CreateFromListener(this, sock);
}
protected override IBluetoothClient GetBluetoothClientForListener(CommonRfcommStream acceptedStrm)
{
throw new NotImplementedException();
}
//--
protected override IBluetoothListener GetBluetoothListener()
{
return new AndroidBthListener(this);
}
protected override IBluetoothSecurity GetBluetoothSecurity()
{
throw new NotImplementedException();
}
//--
protected override void Dispose(bool disposing)
{
// throw new NotImplementedException();
}
// virtual on Factory so it is mockable.
public virtual Java.Util.UUID ToJavaUuid(Guid guid)
{
var uuid = Java.Util.UUID.FromString(guid.ToString("D")); // Hyphens no braces.
#if true || DEBUG
var txtN = guid.ToString("D"); // Hyphens no braces.
var txtJ = uuid.ToString();
Utils.MiscUtils.Trace_Assert(string.Equals(txtJ, txtN, StringComparison.OrdinalIgnoreCase),
"NOT equal " + txtJ + " and " + txtN);
#endif
return uuid;
}
public virtual Guid FromJavaUuid(Java.Util.UUID uuid)
{
var str = uuid.ToString();
var guid = new Guid(str);
#if true || DEBUG
var txtN = guid.ToString("D"); // Hyphens no braces.
var txtJ = uuid.ToString();
Utils.MiscUtils.Trace_Assert(string.Equals(txtJ, txtN, StringComparison.OrdinalIgnoreCase),
"NOT equal " + txtJ + " and " + txtN);
#endif
return guid;
}
}
}
#endif