Пример #1
0
        private async void ScanButton_OnClicked(object sender, EventArgs e)
        {
            scanButton.IsEnabled = false;

            var    scanner    = new MobileBarcodeScanner();
            Result scanResult = await scanner.Scan();

            if (scanResult != null)
            {
                await Task.Delay(150);      //Have to wait for the scan window to disappear

                var wifiCreds = WifiCredentials.FromBase40(scanResult.Text);

                if (wifiCreds?.Ssid != null)
                {
                    await UserDialogs.Instance.AlertAsync($"Wifi information received - will now attempt to connect to {wifiCreds.Ssid}");

                    // ReSharper disable once PossibleNullReferenceException
                    var connected = await(Application.Current as App).WifiConnector.ConnectToWifi(wifiCreds);

                    if (connected)
                    {
                        await UserDialogs.Instance.AlertAsync($"Successfully connected to {wifiCreds.Ssid}");
                    }
                }
            }

            scanButton.IsEnabled = true;
        }
Пример #2
0
        public async Task <bool> ConnectToWifi(WifiCredentials credentials)
        {
            if (credentials == null)
            {
                throw new ArgumentNullException(nameof(credentials));
            }

            var tcs = new TaskCompletionSource <bool>();

#pragma warning disable 4014
            Task.Run(async() =>
            {
                try
                {
                    var wifiConfig = new WifiConfiguration
                    {
                        Ssid         = $"\"{credentials.Ssid}\"",
                        PreSharedKey = $"\"{credentials.Pwd}\""
                    };

                    WifiManager wifiManager = (WifiManager)_context.GetSystemService(Context.WifiService);

                    // Use ID
                    int netId = wifiManager.AddNetwork(wifiConfig);
                    wifiManager.Disconnect();
                    await Task.Delay(1000);
                    int disconnectedIp = wifiManager.ConnectionInfo?.IpAddress ?? 0;
                    int currentIp      = disconnectedIp;
                    wifiManager.EnableNetwork(netId, true);
                    wifiManager.Reconnect();

                    for (int i = 0; i < 100; i++)
                    {
                        currentIp = wifiManager.ConnectionInfo?.IpAddress ?? 0;
                        if (currentIp != disconnectedIp)
                        {
                            await Task.Delay(1000);
                            break;
                        }
                        else
                        {
                            await Task.Delay(250);
                        }
                    }

                    tcs.SetResult(currentIp != disconnectedIp);
                }
                catch (Exception e)
                {
                    Debug.WriteLine(e.ToString());
                    Debugger.Break();
                    tcs.SetResult(false);
                }
            });
#pragma warning restore 4014

            return(await tcs.Task);
        }
        /// <summary>Raise an event to request credentials from user</summary>
        /// <param name="dataModel">The network info data model</param>
        /// <returns>WifiErrorCode.Success on success, otherwise and error</returns>
        private WifiErrorCode GetUserCredentials(WifiNetworkInfo dataModel, ref bool save)
        {
            save = false;

            this.log.Info("********************************", "Comm Wrapper - GetUserCredentials");

            // TODO - implement. Could also use the wifi GUID
            WifiCredentials cred = new WifiCredentials()
            {
                SSID              = dataModel.SSID,
                RemoteHostName    = dataModel.RemoteHostName,
                RemoteServiceName = dataModel.RemoteServiceName,
            };

            WrapErr.ChkVar(this.CredentialsRequestedEvent, 9999, "No subscribers to CredentialsRequestedEvent");
            this.CredentialsRequestedEvent?.Invoke(this, cred);

            if (cred.IsUserCanceled)
            {
                this.log.Info("********************************", "Comm Wrapper - GetUserCredentials Canceled");

                return(WifiErrorCode.UserCanceled);
            }

            if (cred.SSID.Trim().Length == 0)
            {
                this.log.Info("********************************", "Comm Wrapper - GetUserCrendentials Empty SSID");
                return(WifiErrorCode.EmptySsid);
            }
            else if (cred.RemoteHostName.Trim().Length == 0)
            {
                this.log.Info("********************************", "Comm Wrapper - GetUserCrendentials Empty host name");
                return(WifiErrorCode.EmptyHostName);
            }
            else if (cred.RemoteServiceName.Trim().Length == 0)
            {
                this.log.Info("********************************", "Comm Wrapper - GetUserCrendentials Empty port name");
                return(WifiErrorCode.EmptyServiceName);
            }
            else if (cred.WifiPassword.Trim().Length == 0)
            {
                this.log.Info("********************************", "Comm Wrapper - GetUserCrendentials Empty password");

                return(WifiErrorCode.EmptyPassword);
            }

            this.log.Info("GetUserCredentials", () => string.Format("User request save:{0}", cred.IsUserSaveRequest));
            save = cred.IsUserSaveRequest;
            dataModel.RemoteHostName    = cred.RemoteHostName;
            dataModel.RemoteServiceName = cred.RemoteServiceName;
            dataModel.Password          = cred.WifiPassword;
            return(WifiErrorCode.Success);
        }
Пример #4
0
        private void onCredentialsRequested(object sender, WifiCredentials item)
        {
            WifiCredResult result = MsgBoxWifiCred.ShowBox(this.parent, item.SSID, item.RemoteHostName, item.RemoteServiceName);

            if (result.IsChanged)
            {
                item.IsUserSaveRequest = true;
                item.WifiPassword      = result.Password;
                item.IsUserCanceled    = false;
                item.RemoteHostName    = result.HostName;
                item.RemoteServiceName = result.ServiceName;
            }
            else
            {
                item.IsUserCanceled = true;
            }
        }
        private void Wifi_CredentialsRequestedEventHandler(object sender, WifiCredentials cred)
        {
            var result = MsgBoxWifiCred.ShowBox(this, cred.SSID, cred.RemoteHostName, cred.RemoteServiceName);

            cred.IsUserCanceled    = !result.IsOk;
            cred.IsUserSaveRequest = result.Save;
            cred.RemoteHostName    = result.HostName;
            cred.RemoteServiceName = result.ServiceName;
            cred.WifiPassword      = result.Password;


            //cred.RemoteHostName = "192.168.4.1";
            //cred.RemoteServiceName = "80";
            //cred.WifiPassword = "******";

            // TODO - implement dialog


            //App.ShowMsg("Returning cred for wifi");
            // Not using UserName
        }
Пример #6
0
        private void GenerateCode_Click(object sender, EventArgs e)
        {
            var credentials = new WifiCredentials {
                Ssid = Ssid.Text.Trim(), Pwd = Password.Text.Trim()
            };
            string base40 = credentials.ToBase40();

            using (var generator = new QRCodeGenerator())
                using (var codeData = generator.CreateQrCode(base40, QRCodeGenerator.ECCLevel.Q))
                    using (var qrCode = new QRCode(codeData))
                    {
                        Bitmap codeImage   = qrCode.GetGraphic(20);
                        float  resizeScale = Math.Min((float)(QrCodePic.Width - 2) / codeImage.Width, (float)(QrCodePic.Height - 2) / codeImage.Height);
                        Bitmap resized     = new Bitmap(QrCodePic.Width, QrCodePic.Height);
                        var    graphics    = Graphics.FromImage(resized);
                        graphics.FillRectangle(new SolidBrush(Color.White), new RectangleF(0, 0, resized.Width, resized.Height));
                        graphics.DrawImage(codeImage, ((int)resized.Width - ((int)(codeImage.Width * resizeScale))) / 2,
                                           ((int)resized.Height - ((int)(codeImage.Height * resizeScale))) / 2, ((int)(codeImage.Width * resizeScale)), ((int)(codeImage.Height * resizeScale)));
                        QrCodePic.Image = resized;
                    }
        }