本文整理汇总了Golang中github.com/paypal/gatt/xpc.Dict.MustGetDict方法的典型用法代码示例。如果您正苦于以下问题:Golang Dict.MustGetDict方法的具体用法?Golang Dict.MustGetDict怎么用?Golang Dict.MustGetDict使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/paypal/gatt/xpc.Dict
的用法示例。
在下文中一共展示了Dict.MustGetDict方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: HandleXpcEvent
// process device events and asynchronous errors
// (implements XpcEventHandler)
func (d *device) HandleXpcEvent(event xpc.Dict, err error) {
if err != nil {
log.Println("error:", err)
return
}
id := event.MustGetInt("kCBMsgId")
args := event.MustGetDict("kCBMsgArgs")
//log.Printf(">> %d, %v", id, args)
switch id {
case // device event
6, // StateChanged
16, // AdvertisingStarted
17, // AdvertisingStopped
18: // ServiceAdded
d.rspc <- message{id: id, args: args}
case
19, // ReadRequest
20, // WriteRequest
21, // Subscribe
22, // Unubscribe
23: // Confirmation
d.respondToRequest(id, args)
case 37: // PeripheralDiscovered
xa := args.MustGetDict("kCBMsgArgAdvertisementData")
if len(xa) == 0 {
return
}
u := UUID{args.MustGetUUID("kCBMsgArgDeviceUUID")}
a := &Advertisement{
LocalName: xa.GetString("kCBAdvDataLocalName", args.GetString("kCBMsgArgName", "")),
TxPowerLevel: xa.GetInt("kCBAdvDataTxPowerLevel", 0),
ManufacturerData: xa.GetBytes("kCBAdvDataManufacturerData", nil),
}
rssi := args.MustGetInt("kCBMsgArgRssi")
if xu, ok := xa["kCBAdvDataServiceUUIDs"]; ok {
for _, xs := range xu.(xpc.Array) {
s := UUID{reverse(xs.([]byte))}
a.Services = append(a.Services, s)
}
}
if xsds, ok := xa["kCBAdvDataServiceData"]; ok {
xsd := xsds.(xpc.Array)
for i := 0; i < len(xsd); i += 2 {
sd := ServiceData{
UUID: UUID{xsd[i].([]byte)},
Data: xsd[i+1].([]byte),
}
a.ServiceData = append(a.ServiceData, sd)
}
}
if d.peripheralDiscovered != nil {
go d.peripheralDiscovered(&peripheral{id: xpc.UUID(u.b), d: d}, a, rssi)
}
case 38: // PeripheralConnected
u := UUID{args.MustGetUUID("kCBMsgArgDeviceUUID")}
p := &peripheral{
id: xpc.UUID(u.b),
d: d,
reqc: make(chan message),
rspc: make(chan message),
quitc: make(chan struct{}),
sub: newSubscriber(),
}
d.plistmu.Lock()
d.plist[u.String()] = p
d.plistmu.Unlock()
go p.loop()
if d.peripheralConnected != nil {
go d.peripheralConnected(p, nil)
}
case 40: // PeripheralDisconnected
u := UUID{args.MustGetUUID("kCBMsgArgDeviceUUID")}
d.plistmu.Lock()
p := d.plist[u.String()]
delete(d.plist, u.String())
d.plistmu.Unlock()
if d.peripheralDisconnected != nil {
d.peripheralDisconnected(p, nil) // TODO: Get Result as error?
}
close(p.quitc)
case // Peripheral events
54, // RSSIRead
55, // ServiceDiscovered
62, // IncludedServiceDiscovered
63, // CharacteristicsDiscovered
70, // CharacteristicRead
71, // CharacteristicWritten
73, // NotifyValueSet
//.........这里部分代码省略.........