Skip to content

Commit

Permalink
add serviceLost callback
Browse files Browse the repository at this point in the history
  • Loading branch information
brouwer committed Nov 24, 2018
1 parent 536ea8d commit 39a37cc
Show file tree
Hide file tree
Showing 6 changed files with 93 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import eu.sndr.fluttermdnsplugin.handlers.DiscoveryRunningHandler;
import eu.sndr.fluttermdnsplugin.handlers.ServiceDiscoveredHandler;
import eu.sndr.fluttermdnsplugin.handlers.ServiceResolvedHandler;
import eu.sndr.fluttermdnsplugin.handlers.ServiceLostHandler;
import io.flutter.plugin.common.EventChannel;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
Expand Down Expand Up @@ -48,6 +49,10 @@ public static void registerWith(Registrar registrar) {
mResolvedHandler = new ServiceResolvedHandler();
serviceResolved.setStreamHandler(mResolvedHandler);

EventChannel serviceLost = new EventChannel(r.messenger(), NAMESPACE + "/lost");
mLostHandler = new ServiceLostHandler();
serviceLost.setStreamHandler(mLostHandler);

EventChannel discoveryRunning = new EventChannel(r.messenger(), NAMESPACE + "/running");
mDiscoveryRunningHandler = new DiscoveryRunningHandler();
discoveryRunning.setStreamHandler(mDiscoveryRunningHandler);
Expand All @@ -59,6 +64,7 @@ public static void registerWith(Registrar registrar) {
private DiscoveryRunningHandler mDiscoveryRunningHandler;
private ServiceDiscoveredHandler mDiscoveredHandler;
private ServiceResolvedHandler mResolvedHandler;
private ServiceLostHandler mLostHandler;

@Override
public void onMethodCall(MethodCall call, Result result) {
Expand Down Expand Up @@ -147,6 +153,7 @@ public void onServiceResolved(NsdServiceInfo nsdServiceInfo) {
@Override
public void onServiceLost(NsdServiceInfo nsdServiceInfo) {
Log.d(TAG, "Lost Service : " + nsdServiceInfo.toString());
mLostHandler.onServiceLost(ServiceToMap(nsdServiceInfo));
}
};

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package eu.sndr.fluttermdnsplugin.handlers;

import java.util.Map;

import io.flutter.plugin.common.EventChannel;

public class ServiceLostHandler implements EventChannel.StreamHandler {

EventChannel.EventSink sink;
@Override
public void onListen(Object o, EventChannel.EventSink eventSink) {
sink = eventSink;
}

@Override
public void onCancel(Object o) {

}

public void onServiceLost(Map<String, Object> serviceInfoMap){
sink.success(serviceInfoMap);
}
}
13 changes: 13 additions & 0 deletions ios/Classes/FlutterMdnsPlugin.m
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@
#import "FlutterMdnsPlugin.h"
#import "ServiceDiscoveredHandler.h"
#import "ServiceResolvedHandler.h"
#import "ServiceLostHandler.h"
#import "DiscoveryRunningHandler.h"

@interface FlutterMdnsPlugin ()

@property(nonatomic, retain) ServiceDiscoveredHandler *serviceDiscoveredHandler;
@property(nonatomic, retain) ServiceResolvedHandler *serviceResolvedHandler;
@property(nonatomic, retain) ServiceLostHandler *serviceLostHandler;
@property(nonatomic, retain) DiscoveryRunningHandler *discoveryRunningHandler;

@property(nonatomic, retain) NSNetServiceBrowser *serviceBrowser;
Expand Down Expand Up @@ -38,6 +40,13 @@ + (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
instance.serviceResolvedHandler = [[ServiceResolvedHandler alloc] init];
[serviceResolved setStreamHandler:instance.serviceResolvedHandler];

FlutterEventChannel *serviceLost = [[FlutterEventChannel alloc]
initWithName:@"eu.sndr.mdns/lost"
binaryMessenger:registrar.messenger
codec:[FlutterStandardMethodCodec sharedInstance]];
instance.serviceLostHandler = [[ServiceLostHandler alloc] init];
[serviceLost setStreamHandler:instance.serviceLostHandler];

FlutterEventChannel *discoveryRunning = [[FlutterEventChannel alloc]
initWithName:@"eu.sndr.mdns/running"
binaryMessenger:registrar.messenger
Expand Down Expand Up @@ -158,6 +167,10 @@ - (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindServi
- (void)netServiceBrowser:(NSNetServiceBrowser *)netServiceBrowser didRemoveService:(NSNetService *)aNetService moreComing:(BOOL)moreServicesComing
{
[self.services removeObject:aNetService];

[self.serviceLostHandler onServiceLost:
[self serviceToDictionary:aNetService]
];
}

- (NSDictionary *) serviceToDictionary:(NSNetService *)aNetService withAddress:(NSString *)address {
Expand Down
12 changes: 12 additions & 0 deletions ios/Classes/ServiceLostHandler.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
//
// Created by brouwer on 23-11-18.
//

#import <Foundation/Foundation.h>
#import <Flutter/Flutter.h>

@interface ServiceLostHandler : NSObject <FlutterStreamHandler>
- (void)onServiceLost:(NSDictionary *)serviceInfoMap;

- (BOOL)isReady;
@end
28 changes: 28 additions & 0 deletions ios/Classes/ServiceLostHandler.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
//
// Created by brouwer on 23-11-18.
//

#import "ServiceLostHandler.h"

@implementation ServiceLostHandler {
FlutterEventSink _eventSink;
}

- (FlutterError *_Nullable)onListenWithArguments:(id _Nullable)arguments eventSink:(FlutterEventSink)events {
_eventSink = events;
return nil;
}

- (FlutterError *_Nullable)onCancelWithArguments:(id _Nullable)arguments {
return nil;
}

- (void) onServiceLost:(NSDictionary *)serviceInfoMap {
_eventSink(serviceInfoMap);
}

- (BOOL) isReady {
return nil != _eventSink;
}

@end
10 changes: 10 additions & 0 deletions lib/flutter_mdns_plugin.dart
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,13 @@ class DiscoveryCallbacks{
VoidCallback onDiscoveryStopped;
ServiceInfoCallback onDiscovered;
ServiceInfoCallback onResolved;
ServiceInfoCallback onLost;
DiscoveryCallbacks({
this.onDiscoveryStarted,
this.onDiscoveryStopped,
this.onDiscovered,
this.onResolved,
this.onLost,
});
}

Expand All @@ -80,6 +82,9 @@ class FlutterMdnsPlugin {
final EventChannel _serviceResolvedChannel =
const EventChannel("$NAMESPACE/resolved");

final EventChannel _serviceLostChannel =
const EventChannel("$NAMESPACE/lost");

final EventChannel _discoveryRunningChannel =
const EventChannel("$NAMESPACE/running");

Expand All @@ -99,6 +104,11 @@ class FlutterMdnsPlugin {
discoveryCallbacks.onDiscovered(ServiceInfo.fromMap(data));
});

_serviceLostChannel.receiveBroadcastStream().listen((data) {
print("Service lost ${data.toString()}");
discoveryCallbacks.onLost(ServiceInfo.fromMap(data));
});

_discoveryRunningChannel.receiveBroadcastStream().listen((running) {
print("Discovery Running? $running");
if (running && discoveryCallbacks.onDiscoveryStarted != null) {
Expand Down

0 comments on commit 39a37cc

Please sign in to comment.