示例#1
0
        public async Task <bool> Close()
        {
            await Task.Run(() => ClientSocket.Dispose());

            _Status = BrokerConnectionStatus.Disconnected;
            return(true);
        }
示例#2
0
        public async Task <bool> Reconnect()
        {
            if (_Status == BrokerConnectionStatus.Connected || _Status == BrokerConnectionStatus.Connecting)
            {
                return(true);
            }

            _ = await Close();

            ReinitializeSocket();

            _Status = BrokerConnectionStatus.Connecting;
            try
            {
                await ClientSocket.ConnectAsync(
                    new HostName(uri.Host),
                    uri.Port.ToString(),
                    SocketProtectionLevel.PlainSocket
                    );

                _Status = BrokerConnectionStatus.Connected;
            }
            catch (Exception)
            {
                _Status = BrokerConnectionStatus.Disconnected;
                throw new Exception($"failed to connect to {uri.Host}:{uri.Port}");
            }
            return(true);
        }
示例#3
0
        private void ReinitializeSocket()
        {
            var IrpLocation = ApplicationData.Current.LocalSettings.Values.ContainsKey("IrpBrokerLocation") ?
                              ApplicationData.Current.LocalSettings.Values["IrpBrokerLocation"].ToString() :
                              Models.DefaultSettings.IrpBrokerUri;

            uri          = new Uri(IrpLocation);
            ClientSocket = new StreamSocket();
            ClientSocket.Control.KeepAlive = true;
            ClientSocket.Control.NoDelay   = false;
            _Status = BrokerConnectionStatus.Disconnected;
        }