using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.InteropServices; using Assets.Scripts.Ble.CPPBridge; using UnityEngine; namespace Assets.Scripts.Ble { internal class WclBleWatcher { internal WclBleWatcher() { this.CStarted = new WCL_NOTIFY_EVENT(this.OnStart); this.CStopped = new WCL_NOTIFY_EVENT(this.OnStop); this.CUuidPacketReceived = new WclBleWatcher.WCL_ADV_UUID_PKT_EVENT(this.OnUuidPacketReceived); this.CInfoPackageReceived = new WclBleWatcher.WCL_ADV_INFO_PKT_EVENT(this.OnInfoPacketReceived); this.mPtr = WclBleWatcher.WCLWatcherCreate(this.CInfoPackageReceived, this.CStarted, this.CStopped, this.CUuidPacketReceived); } // Token: 0x170005E5 RID: 1509 // (get) Token: 0x06002127 RID: 8487 RVA: 0x00089426 File Offset: 0x00087626 public bool Active { get { //base.CheckDisposed(); return WclBleWatcher.WCLWatcherGetActive(this.mPtr); } } // Token: 0x0600212A RID: 8490 [DllImport("WclBlePluginCPP.dll", CallingConvention = CallingConvention.StdCall)] [return: MarshalAs(UnmanagedType.SysInt)] private static extern IntPtr WCLWatcherCreate([MarshalAs(UnmanagedType.FunctionPtr)][In] WclBleWatcher.WCL_ADV_INFO_PKT_EVENT InfoPacketReceived, [MarshalAs(UnmanagedType.FunctionPtr)][In] WCL_NOTIFY_EVENT Started, [MarshalAs(UnmanagedType.FunctionPtr)][In] WCL_NOTIFY_EVENT Stopped, [MarshalAs(UnmanagedType.FunctionPtr)][In] WclBleWatcher.WCL_ADV_UUID_PKT_EVENT UidPacketReceived); // Token: 0x0600212B RID: 8491 [DllImport("WclBlePluginCPP.dll", CallingConvention = CallingConvention.StdCall)] private static extern void WCLWatcherDestroy([MarshalAs(UnmanagedType.SysInt)][In] IntPtr Watcher); // Token: 0x0600212C RID: 8492 [DllImport("WclBlePluginCPP.dll", CallingConvention = CallingConvention.StdCall)] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool WCLWatcherGetActive([MarshalAs(UnmanagedType.SysInt)][In] IntPtr Watcher); // Token: 0x0600212D RID: 8493 [DllImport("WclBlePluginCPP.dll", CallingConvention = CallingConvention.StdCall)] [return: MarshalAs(UnmanagedType.I4)] private static extern int WCLWatcherStart([MarshalAs(UnmanagedType.SysInt)][In] IntPtr Watcher, [MarshalAs(UnmanagedType.SysInt)][In] IntPtr Radio); // Token: 0x0600212E RID: 8494 [DllImport("WclBlePluginCPP.dll", CallingConvention = CallingConvention.StdCall)] [return: MarshalAs(UnmanagedType.I4)] private static extern int WCLWatcherStop([MarshalAs(UnmanagedType.SysInt)][In] IntPtr Watcher); // Token: 0x0600212F RID: 8495 RVA: 0x00089464 File Offset: 0x00087664 public void StartScan(IntPtr radio) { if (!this.Active) { int num = WclBleWatcher.WCLWatcherStart(this.mPtr, radio); //if (WclBleWatcher.Info) { Debug.Log(string.Format("BLE watcher started with result {0}", num)); } } } // Token: 0x06002130 RID: 8496 RVA: 0x000894B4 File Offset: 0x000876B4 public bool StopScan() { if (this.Active) { int num = WclBleWatcher.WCLWatcherStop(this.mPtr); Debug.Log(string.Format("BLE watcher stopped with result {0}", num)); return num == 0; } return false; } // Token: 0x06002131 RID: 8497 RVA: 0x00089508 File Offset: 0x00087708 public void Dispose() { WclBleWatcher.WCLWatcherDestroy(this.mPtr); this.mPtr = IntPtr.Zero; this.CInfoPackageReceived = null; this.CUuidPacketReceived = null; this.CStarted = null; this.CStopped = null; Debug.Log("BLE watcher disposed"); } // Token: 0x06002132 RID: 8498 RVA: 0x00089564 File Offset: 0x00087764 private void OnInfoPacketReceived(IntPtr sender, long address, long timestamp, sbyte rssi, string name, WclBleAdvertisementType packetType, byte flags) { //Debug.Log($"address:{ address }, name:{ name }, rssi:{ rssi }, type:{ packetType }"); //delegate //{ // WclBleWatcher.SafeInvoke(this.InfoPacketReceived, this, address, timestamp, rssi, name, packetType, flags); //}.OnUIThreadAsync(); Loom.QueueOnMainThread(() => { this.InfoPacketReceived(this, address, timestamp, rssi, name, packetType, flags); }); } // Token: 0x06002133 RID: 8499 RVA: 0x000895BC File Offset: 0x000877BC private void OnUuidPacketReceived(IntPtr sender, long address, long timestamp, sbyte rssi, Guid uuid) { //Debug.Log($"uuid:{ uuid.ToString() }, address:{ address }, rssi:{ rssi }"); //delegate //{ // WclBleWatcher.SafeInvoke(this.UuidPacketReceived, this, address, timestamp, rssi, uuid); //}.OnUIThreadAsync(); Loom.QueueOnMainThread(() => { this.UuidPacketReceived(this, address, timestamp, rssi, uuid); }); } // Token: 0x06002134 RID: 8500 RVA: 0x000895F9 File Offset: 0x000877F9 private void OnStart(IntPtr Sender) { Debug.Log("watcher started"); } // Token: 0x06002135 RID: 8501 RVA: 0x0008960F File Offset: 0x0008780F private void OnStop(IntPtr Sender) { Debug.Log("Watcher closed"); } // Token: 0x06002136 RID: 8502 RVA: 0x00089628 File Offset: 0x00087828 private static void SafeInvoke(WclBleWatcher.InfoPacketReceivedEvent callback, object sender, long address, long timestamp, sbyte rssi, string name, WclBleAdvertisementType packetType, byte flags) { //ExceptionUtils.SafeInvoke(callback, new object[] //{ // sender, // address, // timestamp, // rssi, // name, // packetType, // flags //}, WclBleWatcher.log); } // Token: 0x06002137 RID: 8503 RVA: 0x0008967F File Offset: 0x0008787F private static void SafeInvoke(WclBleWatcher.UuidPacketReceivedEvent callback, object sender, long address, long timestamp, sbyte rssi, Guid uuid) { //ExceptionUtils.SafeInvoke(callback, new object[] //{ // sender, // address, // timestamp, // rssi, // uuid //}, WclBleWatcher.log); } // Token: 0x04001348 RID: 4936 public WclBleWatcher.InfoPacketReceivedEvent InfoPacketReceived; // Token: 0x04001349 RID: 4937 public WclBleWatcher.UuidPacketReceivedEvent UuidPacketReceived; // Token: 0x0400134B RID: 4939 private WclBleWatcher.WCL_ADV_INFO_PKT_EVENT CInfoPackageReceived; // Token: 0x0400134C RID: 4940 private WCL_NOTIFY_EVENT CStarted; // Token: 0x0400134D RID: 4941 private WCL_NOTIFY_EVENT CStopped; // Token: 0x0400134E RID: 4942 private WclBleWatcher.WCL_ADV_UUID_PKT_EVENT CUuidPacketReceived; // Token: 0x0400134F RID: 4943 private IntPtr mPtr; // Token: 0x02000919 RID: 2329 // (Invoke) Token: 0x06003FB3 RID: 16307 public delegate void InfoPacketReceivedEvent(object Sender, long Address, long Timestamp, sbyte Rssi, string Name, WclBleAdvertisementType PacketType, byte Flags); // Token: 0x0200091A RID: 2330 // (Invoke) Token: 0x06003FB7 RID: 16311 public delegate void UuidPacketReceivedEvent(object Sender, long Address, long Timestamp, sbyte Rssi, Guid Uuid); // Token: 0x0200091B RID: 2331 // (Invoke) Token: 0x06003FBB RID: 16315 [UnmanagedFunctionPointer(CallingConvention.StdCall, SetLastError = false)] private delegate void WCL_ADV_INFO_PKT_EVENT([MarshalAs(UnmanagedType.SysInt)][In] IntPtr Sender, [MarshalAs(UnmanagedType.I8)][In] long Address, [MarshalAs(UnmanagedType.I8)][In] long Timestamp, [MarshalAs(UnmanagedType.I1)][In] sbyte Rssi, [MarshalAs(UnmanagedType.LPWStr)][In] string Name, [MarshalAs(UnmanagedType.U4)][In] WclBleAdvertisementType PacketType, [MarshalAs(UnmanagedType.U1)][In] byte Flags); // Token: 0x0200091C RID: 2332 // (Invoke) Token: 0x06003FBF RID: 16319 [UnmanagedFunctionPointer(CallingConvention.StdCall, SetLastError = false)] private delegate void WCL_ADV_UUID_PKT_EVENT([MarshalAs(UnmanagedType.SysInt)][In] IntPtr Sender, [MarshalAs(UnmanagedType.I8)][In] long Address, [MarshalAs(UnmanagedType.I8)][In] long Timestamp, [MarshalAs(UnmanagedType.I1)][In] sbyte Rssi, [In] Guid Uuid); } }