public bool Start() { try { if (!IsActive) { #region WCF client var address = new EndpointAddress(new Uri("net.tcp://localhost:26760/ScpRootHubService")); var binding = new NetTcpBinding { TransferMode = TransferMode.Streamed, Security = new NetTcpSecurity { Mode = SecurityMode.None } }; var factory = new ChannelFactory <IScpCommandService>(binding, address); _rootHub = factory.CreateChannel(address); #endregion #region Feed client var rootHubFeedChannel = new ScpNativeFeedChannel(_rxFeedClient); rootHubFeedChannel.Receiver.SubscribeOn(TaskPoolScheduler.Default).Subscribe(buffer => { if (buffer.Length <= 0) { return; } OnFeedPacketReceived(new ScpHidReport(buffer)); }); _rxFeedClient.ConnectAsync(); #endregion if (_rootHub != null) { _xmlMap.LoadXml(_rootHub.GetXml()); _xmlMapper.Initialize(_xmlMap); } else { Log.Error("Couldn't initialize XML mapper"); } IsActive = true; } } catch (Exception ex) { Log.ErrorFormat("Unexpected error: {0}", ex); } return(IsActive); }
public bool Start() { try { if (!IsActive) { #region WCF client var address = new EndpointAddress(new Uri("net.tcp://localhost:26760/ScpRootHubService")); var binding = new NetTcpBinding { TransferMode = TransferMode.Streamed, Security = new NetTcpSecurity { Mode = SecurityMode.None } }; var factory = new ChannelFactory <IScpCommandService>(binding, address); _rootHub = factory.CreateChannel(address); #endregion #region Feed client var rootHubFeedChannel = new ScpNativeFeedChannel(_rxFeedClient); rootHubFeedChannel.Receiver.SubscribeOn(TaskPoolScheduler.Default).Subscribe(buffer => { if (buffer.Length <= 0) { return; } ScpHidReport report; using (var ms = new MemoryStream(buffer)) { BinaryFormatter formatter = new BinaryFormatter(); report = (ScpHidReport)formatter.Deserialize(ms); } OnFeedPacketReceived(report); }); _rxFeedClient.ConnectAsync(); #endregion IsActive = true; } } catch (Exception ex) { Log.ErrorFormat("Unexpected error: {0}", ex); } return(IsActive); }
/// <summary> /// Opens and initializes devices and services listening and running on the local machine. /// </summary> /// <returns>True on success, false otherwise.</returns> public override bool Open() { var opened = false; Log.Debug("Initializing root hub"); _limitInstance = new LimitInstance(@"Global\ScpDsxRootHub"); try { if (!_limitInstance.IsOnlyInstance) // existing root hub running as desktop app throw new RootHubAlreadyStartedException( "The root hub is already running, please close the ScpServer first!"); } catch (UnauthorizedAccessException) // existing root hub running as service { throw new RootHubAlreadyStartedException( "The root hub is already running, please stop the ScpService first!"); } Log.DebugFormat("++ {0} {1}", Assembly.GetExecutingAssembly().Location, Assembly.GetExecutingAssembly().GetName().Version); Log.DebugFormat("++ {0}", OsInfoHelper.OsInfo); #region Native feed server _rxFeedServer = new ReactiveListener(Settings.Default.RootHubNativeFeedPort); _rxFeedServer.Connections.Subscribe(socket => { Log.DebugFormat("Client connected on native feed channel: {0}", socket.GetHashCode()); var protocol = new ScpNativeFeedChannel(socket); _nativeFeedSubscribers.Add(socket.GetHashCode(), protocol); protocol.Receiver.Subscribe(packet => { Log.Warn("Uuuhh how did we end up here?!"); }); socket.Disconnected += (sender, e) => { Log.DebugFormat( "Client disconnected from native feed channel {0}", sender.GetHashCode()); _nativeFeedSubscribers.Remove(socket.GetHashCode()); }; socket.Disposed += (sender, e) => { Log.DebugFormat("Client disposed from native feed channel {0}", sender.GetHashCode()); _nativeFeedSubscribers.Remove(socket.GetHashCode()); }; }); #endregion opened |= _scpBus.Open(GlobalConfiguration.Instance.Bus); opened |= _usbHub.Open(); opened |= _bthHub.Open(); GlobalConfiguration.Load(); return opened; }
public override bool Open() { var opened = false; Log.Info("Initializing root hub"); Log.DebugFormat("++ {0} {1}", Assembly.GetExecutingAssembly().Location, Assembly.GetExecutingAssembly().GetName().Version); Log.DebugFormat("++ {0}", OsInfoHelper.OsInfo()); #region Native feed server _rxFeedServer.Connections.Subscribe(socket => { Log.InfoFormat("Client connected on native feed channel: {0}", socket.GetHashCode()); var protocol = new ScpNativeFeedChannel(socket); lock (this) { _nativeFeedSubscribers.Add(socket.GetHashCode(), protocol); } protocol.Receiver.Subscribe(packet => { Log.Debug("Uuuhh how did we end up here?!"); }); socket.Disconnected += (sender, e) => { Log.InfoFormat( "Client disconnected from native feed channel {0}", sender.GetHashCode()); lock (this) { _nativeFeedSubscribers.Remove(socket.GetHashCode()); } }; socket.Disposed += (sender, e) => { Log.InfoFormat("Client disposed from native feed channel {0}", sender.GetHashCode()); lock (this) { _nativeFeedSubscribers.Remove(socket.GetHashCode()); } }; }); #endregion scpMap.Open(); opened |= _scpBus.Open(Global.Bus); opened |= _usbHub.Open(); opened |= _bthHub.Open(); Global.Load(); return opened; }
public bool Start() { try { if (!IsActive) { #region WCF client var address = new EndpointAddress(new Uri("net.tcp://localhost:26760/ScpRootHubService")); var binding = new NetTcpBinding { TransferMode = TransferMode.Streamed, Security = new NetTcpSecurity {Mode = SecurityMode.None} }; var factory = new ChannelFactory<IScpCommandService>(binding, address); _rootHub = factory.CreateChannel(address); #endregion #region Feed client var rootHubFeedChannel = new ScpNativeFeedChannel(_rxFeedClient); rootHubFeedChannel.Receiver.SubscribeOn(TaskPoolScheduler.Default).Subscribe(buffer => { if (buffer.Length <= 0) return; OnFeedPacketReceived(new ScpHidReport(buffer)); }); _rxFeedClient.ConnectAsync(); #endregion IsActive = true; } } catch (Exception ex) { Log.ErrorFormat("Unexpected error: {0}", ex); } return IsActive; }
/// <summary> /// Opens and initializes devices and services listening and running on the local machine. /// </summary> /// <returns>True on success, false otherwise.</returns> public override bool Open() { var opened = false; Log.Debug("Initializing root hub"); _limitInstance = new LimitInstance(@"Global\ScpDsxRootHub"); try { if (!_limitInstance.IsOnlyInstance) // existing root hub running as desktop app { throw new RootHubAlreadyStartedException( "The root hub is already running, please close the ScpServer first!"); } } catch (UnauthorizedAccessException) // existing root hub running as service { throw new RootHubAlreadyStartedException( "The root hub is already running, please stop the ScpService first!"); } Log.DebugFormat("++ {0} {1}", Assembly.GetExecutingAssembly().Location, Assembly.GetExecutingAssembly().GetName().Version); Log.DebugFormat("++ {0}", OsInfoHelper.OsInfo); #region Native feed server _rxFeedServer = new ReactiveListener(Settings.Default.RootHubNativeFeedPort); _rxFeedServer.Connections.Subscribe(socket => { Log.DebugFormat("Client connected on native feed channel: {0}", socket.GetHashCode()); var protocol = new ScpNativeFeedChannel(socket); _nativeFeedSubscribers.Add(socket.GetHashCode(), protocol); protocol.Receiver.Subscribe(packet => { Log.Warn("Uuuhh how did we end up here?!"); }); socket.Disconnected += (sender, e) => { Log.DebugFormat( "Client disconnected from native feed channel {0}", sender.GetHashCode()); _nativeFeedSubscribers.Remove(socket.GetHashCode()); }; socket.Disposed += (sender, e) => { Log.DebugFormat("Client disposed from native feed channel {0}", sender.GetHashCode()); _nativeFeedSubscribers.Remove(socket.GetHashCode()); }; }); #endregion opened |= _scpBus.Open(GlobalConfiguration.Instance.Bus); opened |= _usbHub.Open(); opened |= _bthHub.Open(); GlobalConfiguration.Load(); return(opened); }
public bool Start() { try { if (!m_Active) { #region WCF client var address = new EndpointAddress(new Uri("net.tcp://localhost:26760/ScpRootHubService")); var binding = new NetTcpBinding(); var factory = new ChannelFactory<IScpCommandService>(binding, address); _rootHub = factory.CreateChannel(address); #endregion #region Feed client var rootHubFeedChannel = new ScpNativeFeedChannel(_rxFeedClient); rootHubFeedChannel.Receiver.SubscribeOn(TaskPoolScheduler.Default).Subscribe(buffer => { if (buffer.Length <= 0) return; var packet = new DsPacket(); OnFeedPacketReceived(packet.Load(buffer)); }); _rxFeedClient.ConnectAsync(); #endregion if (_rootHub != null) { _xmlMap.LoadXml(_rootHub.GetXml()); _xmlMapper.Initialize(_xmlMap); } else { Log.Error("Couldn't initialize XML mapper"); } m_Active = true; } } catch (Exception ex) { Log.ErrorFormat("Unexpected error: {0}", ex); } return m_Active; }
public override bool Open() { var opened = false; Log.Info("Initializing root hub"); Log.DebugFormat("++ {0} {1}", Assembly.GetExecutingAssembly().Location, Assembly.GetExecutingAssembly().GetName().Version); Log.DebugFormat("++ {0}", OsInfoHelper.OsInfo); #region Native feed server _rxFeedServer.Connections.Subscribe(socket => { Log.InfoFormat("Client connected on native feed channel: {0}", socket.GetHashCode()); var protocol = new ScpNativeFeedChannel(socket); lock (this) { _nativeFeedSubscribers.Add(socket.GetHashCode(), protocol); } protocol.Receiver.Subscribe(packet => { Log.Debug("Uuuhh how did we end up here?!"); }); socket.Disconnected += (sender, e) => { Log.InfoFormat( "Client disconnected from native feed channel {0}", sender.GetHashCode()); lock (this) { _nativeFeedSubscribers.Remove(socket.GetHashCode()); } }; socket.Disposed += (sender, e) => { Log.InfoFormat("Client disposed from native feed channel {0}", sender.GetHashCode()); lock (this) { _nativeFeedSubscribers.Remove(socket.GetHashCode()); } }; }); #endregion scpMap.Open(); opened |= _scpBus.Open(GlobalConfiguration.Instance.Bus); opened |= _usbHub.Open(); opened |= _bthHub.Open(); GlobalConfiguration.Load(); return(opened); }