Пример #1
0
        public override void Start()
        {
            _logger.NotifyUserInfo("TCPIP Mgr", $"Started Watcher");

            _ssdpClient = NetworkServices.GetSSDPClient();
            _ssdpClient.ShowDiagnostics = true;
            _ssdpClient.NewDeviceFound += _ssdpClient_NewDeviceFound;
            _ssdpClient.SsdpQueryAsync(port: Constants.UPNPListenPort);
        }
Пример #2
0
        protected override void StartWatcher()
        {
            _logger.NotifyUserInfo("TCPIP Mgr", $"Started Watcher");

            _ssdpClient = NetworkServices.GetSSDPClient();
            _ssdpClient.ShowDiagnostics = true;
            _ssdpClient.NewDeviceFound += _ssdpClient_NewDeviceFound;
            _ssdpClient.SsdpQueryAsync(port: 1900);
        }
Пример #3
0
 public TCPListener(ITankBotLogger logger, IServer server, int port)
 {
     _server = server;
     _logger = logger;
     _port   = port;
     _logger.NotifyUserInfo("TCPIP Listener", $"Created Listener");
 }
Пример #4
0
 public async void Listen()
 {
     try
     {
         // keep reading the serial input
         while (true)
         {
             await ReadAsync(_readCancellationTokenSource.Token);
         }
     }
     catch (TaskCanceledException)
     {
         _logger.NotifyUserInfo("SerialChannel_Listen", "Task Cancelled - Closing");
     }
     catch (Exception ex)
     {
         _logger.NotifyUserError("SerialChannel_Listen", ex.Message);
     }
     finally
     {
         // Cleanup once complete
         if (_dataReaderObject != null)
         {
             _dataReaderObject.DetachStream();
             _dataReaderObject = null;
         }
     }
 }
Пример #5
0
        public override async Task <bool> ConnectAsync()
        {
            _socket = new StreamSocket();

            State = States.Connecting;

            try
            {
                await _socket.ConnectAsync(_deviceService.ConnectionHostName, _deviceService.ConnectionServiceName);

                _writer = new DataWriter(_socket.OutputStream);

                var dataReader = new DataReader(_socket.InputStream);
                dataReader.InputStreamOptions = InputStreamOptions.Partial;
                ReceiveDataAsync(dataReader);
                State = States.Connected;
                ConnectCommand.Enabled = false;
                _logger.NotifyUserInfo("BT Channel", "Connected!");
                return(true);
            }
            catch (Exception ex)
            {
                _logger.NotifyUserError("BT Channel", ex.Message);
                return(false);
            }
        }
Пример #6
0
        public BluetoothChannel(DeviceInformation deviceInfo, ITankBotLogger logger)
        {
            _logger     = logger;
            _deviceInfo = deviceInfo;
            Id          = _deviceInfo.Id;
            DeviceName  = _deviceInfo.Name;

            State = States.Disconnected;
            _logger.NotifyUserInfo("BT Channel", "Created");
        }
Пример #7
0
        public TCPIPChannel(uPnPDevice device, ITankBotLogger logger)
        {
            _remoteDevice = device;
            DeviceName    = device.FriendlyName;
            Id            = device.UDN + " " + device.IPAddress;
            _logger       = logger;
            _logger.NotifyUserInfo("TCPIP Channel", $"Created Device for: {DeviceName}");

            _parser = new MessageParser();
            _parser.MessageReady += _parser_MessageReady;
        }
Пример #8
0
        private void ProcessBuffer(byte[] buffer)
        {
            if (_currentIncomingMessage == null)
            {
                _currentIncomingMessage = new mBlockIncomingMessage();
            }

            foreach (var value in buffer)
            {
                /* Received message format
                 *  0xFF - Header Byte 1
                 *  0x55 - Header Byte 2
                 *  0xXX - Message index corresponding to request
                 *  0x0X - Payload Type - 1 byte 2 float 3 short 4 len+string 5 double
                 *  [0xXX....0xXX] Payload matcing size
                 *  0x0D
                 *  0x0A
                 */

                _currentIncomingMessage.AddByte(value);
                if (_currentIncomingMessage.EndsWithCRLF())
                {
                    IncomingMessages.Add(_currentIncomingMessage);

                    if (_currentIncomingMessage.BufferSize > 4)
                    {
                        _currentIncomingMessage.MessageSerialNumber = _currentIncomingMessage.Buffer[2];
                        _logger.NotifyUserInfo("mBlock", $"<<< {_currentIncomingMessage.MessageSerialNumber:X2}. " + _currentIncomingMessage.MessageHexString);

                        ProcessMessage(_currentIncomingMessage);
                    }
                    else
                    {
                        _logger.NotifyUserInfo("mBlock", $"<<< XXXXX. " + _currentIncomingMessage.MessageHexString);
                    }

                    _currentIncomingMessage = new mBlockIncomingMessage();
                }
            }
        }
Пример #9
0
        private void ProcessBuffer(byte[] buffer)
        {
            if (_currentIncomingMessage == null)
            {
                _currentIncomingMessage = new mBlockIncomingMessage();
            }

            foreach (var value in buffer)
            {
                /* Received message format
                 *  0xFF - Header Byte 1
                 *  0x55 - Header Byte 2
                 *  0xXX - Message index corresponding to request
                 *  0x0X - Payload Type - 1 byte 2 float 3 short 4 len+string 5 double
                 *  [0xXX....0xXX] Payload matcing size
                 *  0x0D
                 *  0x0A
                 */

                _currentIncomingMessage.AddByte(value);
                if (_currentIncomingMessage.EndsWithCRLF())
                {
                    IncomingMessages.Add(_currentIncomingMessage);
                    //     Debug.WriteLine(String.Format("{0:000000} <<<", (DateTime.Now - _start).TotalMilliseconds) + _currentIncomingMessage.MessageHexString);
                    _logger.NotifyUserInfo("mBlock", "<<< " + _currentIncomingMessage.MessageHexString);

                    if (_currentIncomingMessage.BufferSize > 4)
                    {
                        _currentIncomingMessage.MessageSerialNumber = _currentIncomingMessage.Buffer[2];
                        ProcessMessage(_currentIncomingMessage);
                    }

                    _currentIncomingMessage = new mBlockIncomingMessage();
                }
            }
        }
Пример #10
0
        private async void _parser_MessageReady(object sender, NetworkMessage e)
        {
            if (e.MessageTypeCode == SystemMessages.Ping)
            {
                await Write(SystemMessages.CreatePong().GetBuffer());

                _logger.NotifyUserInfo("Client_MessageReceived", "Ping Received >> Pong Sent");
            }
            else
            {
                MessageRecevied?.Invoke(sender, e);
            }


            _lastMessageDateStamp = DateTime.Now;
        }
Пример #11
0
        public async void StartListening()
        {
            try
            {
                _listener = new StreamSocketListener();
                _listener.ConnectionReceived += _listener_ConnectionReceived;

                _logger.NotifyUserInfo("TCPIP Listener", $"Started Listening on Port {_port}");
                await _listener.BindServiceNameAsync(_port.ToString());
            }
            catch (Exception ex)
            {
                if (_listener != null)
                {
                    _listener.Dispose();
                    _listener = null;
                }
                _logger.NotifyUserError("TCPIP Listener", ex.Message);
            }
        }
Пример #12
0
        private void _parser_MessageReady(object sender, NetworkMessage e)
        {
            _logger.NotifyUserInfo("Client_MessageReceived", $"Message Received - {e.MessageTypeCode}");

            RaiseNetworkMessageReceived(e);
        }
Пример #13
0
        public override void Start()
        {
            // Request additional properties
            string[] requestedProperties = new string[] { "System.Devices.Aep.DeviceAddress", "System.Devices.Aep.IsConnected" };

            _deviceWatcher = DeviceInformation.CreateWatcher("(System.Devices.Aep.ProtocolId:=\"{e0cbf06c-cd8b-4647-bb8a-263b43f0f974}\")",
                                                             requestedProperties,
                                                             DeviceInformationKind.AssociationEndpoint);

            _logger.NotifyUserInfo("BT Mgr", "Watcher Started");

            // Hook up handlers for the watcher events before starting the watcher
            _deviceWatcher.Added += new TypedEventHandler <DeviceWatcher, DeviceInformation>((watcher, deviceInfo) =>
            {
                // Since we have the collection databound to a UI element, we need to update the collection on the UI thread.
                Services.DispatcherServices.Invoke(() => {
                    // Make sure device name isn't blank
                    if (deviceInfo.Name != "")
                    {
                        _logger.NotifyUserInfo("BT Mgr", $"Found Channel => " + deviceInfo.Name);
                        RaiseDeviceFoundEvent(new BluetoothChannel(deviceInfo, _logger));
                    }
                });
            });

            _deviceWatcher.Updated += new TypedEventHandler <DeviceWatcher, DeviceInformationUpdate>((watcher, deviceInfoUpdate) =>
            {
                Services.DispatcherServices.Invoke(() => {
                    _logger.NotifyUserInfo("BT Mgr", $"Device Updated => {deviceInfoUpdate.Id}.");

                    var updatedChannel = _channels.Where(itm => itm.Id == deviceInfoUpdate.Id).FirstOrDefault();
                    if (updatedChannel != null)
                    {
                        //TODO: Maybe introduce again.
                        //updatedChannel.Update(deviceInfoUpdate);
                    }
                });
            });

            _deviceWatcher.EnumerationCompleted += new TypedEventHandler <DeviceWatcher, Object>((watcher, obj) =>
            {
                _logger.NotifyUserInfo("BT Mgr", $"{_channels.Count} devices found. Enumeration completed. Watching for updates...");
            });

            _deviceWatcher.Removed += new TypedEventHandler <DeviceWatcher, DeviceInformationUpdate>((watcher, deviceInfoUpdate) =>
            {
                // Since we have the collection databound to a UI element, we need to update the collection on the UI thread.
                Services.DispatcherServices.Invoke(() => {
                    _logger.NotifyUserInfo("BT Mgr", $"Device Removed => {deviceInfoUpdate.Id}.");
                    var removedDevice = _channels.Where(itm => itm.Id == deviceInfoUpdate.Id).FirstOrDefault();
                    if (removedDevice != null)
                    {
                        _channels.Remove(removedDevice);
                    }
                });
            });

            _deviceWatcher.Stopped += new TypedEventHandler <DeviceWatcher, Object>((watcher, obj) =>
            {
                Services.DispatcherServices.Invoke(() => {
                    var status = (watcher.Status == DeviceWatcherStatus.Aborted ? "aborted" : "stopped");
                    _logger.NotifyUserInfo("BT Mgr", $"BT Manager State Change: {status}.");
                    _channels.Clear();
                });
            });

            _deviceWatcher.Start();
        }