//------------------------------------------------------------------------------------------------------------------------ #endregion #region Constructor //------------------------------------------------------------------------------------------------------------------------ public NodeDiscoverManager(Node Node, int YPCPort = DefaultYPCPort) { this.Node = Node; this.YPCPort = YPCPort; //build flags var flags = NodeFlags.None; if (Node.CanSolveGraphs) { flags |= NodeFlags.CanSolveGraphs; } //create outgoing message #if NETFX var version = Assembly.GetExecutingAssembly().GetName().Version; DiscoveryMessage = new DiscoveryMessage() { ProtocolVersion = Protocol.Version, MajorVersion = version.Major, MinorVersion = version.Minor, BuildVersion = version.Build, Flags = (int)flags, }; #else DiscoveryMessage = new DiscoveryMessage() { ProtocolVersion = Protocol.Version, MajorVersion = Package.Current.Id.Version.Major, MinorVersion = Package.Current.Id.Version.Minor, BuildVersion = Package.Current.Id.Version.Build, Flags = (int)flags, }; #endif //create discoverer Discoverer = new YPChannel.Transport.Sockets.LANDiscoverer(DiscoveryMessage, BroadcastPort: BroadcastPort); Discoverer.OnEndpointMsgRx += Discoverer_OnEndpointMsgRx; Discoverer.OnEndpointTimeout += Discoverer_OnEndpointTimeout; //hook event for shutdown YPChannel.Channel.OnSystemShutDownRequest.Add(Yodiwo.WeakAction <object> .Create(Deinitialize)); }
//------------------------------------------------------------------------------------------------------------------------ #endregion #region Constructor //------------------------------------------------------------------------------------------------------------------------ public NodeDiscoverManager(Node Node, int YPCPort = DefaultYPCPort) { this.Node = Node; this.YPCPort = YPCPort; //build flags var flags = NodeFlags.None; if (Node.CanSolveGraphs) flags |= NodeFlags.CanSolveGraphs; //create outgoing message #if NETFX var version = Assembly.GetExecutingAssembly().GetName().Version; DiscoveryMessage = new DiscoveryMessage() { ProtocolVersion = Protocol.Version, MajorVersion = version.Major, MinorVersion = version.Minor, BuildVersion = version.Build, Flags = (int)flags, }; #else DiscoveryMessage = new DiscoveryMessage() { ProtocolVersion = Protocol.Version, MajorVersion = Package.Current.Id.Version.Major, MinorVersion = Package.Current.Id.Version.Minor, BuildVersion = Package.Current.Id.Version.Build, Flags = (int)flags, }; #endif //create discoverer Discoverer = new YPChannel.Transport.Sockets.LANDiscoverer(DiscoveryMessage, BroadcastPort: BroadcastPort); Discoverer.OnEndpointMsgRx += Discoverer_OnEndpointMsgRx; Discoverer.OnEndpointTimeout += Discoverer_OnEndpointTimeout; //hook event for shutdown YPChannel.Channel.OnSystemShutDownRequest.Add(Yodiwo.WeakAction<object>.Create(Deinitialize)); }
//------------------------------------------------------------------------------------------------------------------------ private void Discoverer_OnEndpointTimeout(LANDiscoverer.RemoteEndpointInfo endpoint) { try { var remInfo = RemoteNodes.TryGetOrDefault(endpoint.ID); if (remInfo != null) { remInfo._disconnect(); RemoteNodes.Remove(endpoint.ID); } } catch (Exception ex) { DebugEx.TraceError(ex, "Discoverer_OnEndpointTimeout error"); } }