Beispiel #1
0
        public async Task DisconnectFromClientNetwork(string networkSsid)
        {
            if (_ConnectedSocket == null)
            {
                return;
            }

            var disconnectRequest = new CompanionAppCommunication()
            {
                Verb = "DisconnectFromNetwork", Data = networkSsid
            };

            // Send request to disconnect to network
            WriteToSocket(disconnectRequest);

            // Read response with available networks
            var networkResponse = await GetNextRequest();

            if (networkResponse != null && networkResponse.Verb == "DisconnectResult")
            {
                if (ClientNetworkConnectedEvent != null)
                {
                    ClientNetworkConnectedEvent(networkResponse.Data);
                }
            }
        }
Beispiel #2
0
        public async Task ConnectToClientNetwork(string networkSsid, string password)
        {
            if (_ConnectedSocket == null)
            {
                return;
            }

            var connectRequest = new CompanionAppCommunication()
            {
                Verb = "ConnectToNetwork", Data = string.Format("{0}={1}", networkSsid, password)
            };

            // Send request to connect to network
            WriteToSocket(connectRequest);

            // Read response with available networks
            var networkResponse = await GetNextRequest();

            if (networkResponse != null && networkResponse.Verb == "ConnectResult")
            {
                if (ClientNetworkConnectedEvent != null)
                {
                    ClientNetworkConnectedEvent(networkResponse.Data);
                }
            }
        }
Beispiel #3
0
        public async Task RequestClientNetworks(ObservableCollection <Network> availableNetworks)
        {
            if (_ConnectedSocket == null)
            {
                return;
            }

            var waitForClear = new AutoResetEvent(false);

            Device.BeginInvokeOnMainThread(() => {
                availableNetworks.Clear();
                waitForClear.Set();
            });
            waitForClear.WaitOne();

            var networkRequest = new CompanionAppCommunication()
            {
                Verb = "GetAvailableNetworks"
            };

            // Send request for available networks
            WriteToSocket(networkRequest);

            // Read response with available networks
            var networkResponse = await GetNextRequest();

            if (networkResponse != null && networkResponse.Verb == "AvailableNetworks")
            {
                var availableNetworkArray = JsonToStringList(networkResponse.Data);
                availableNetworkArray.ForEach(availableNetwork => {
                    var network = new Network()
                    {
                        Ssid = availableNetwork
                    };
                    Device.BeginInvokeOnMainThread(() => {
                        availableNetworks.Add(network);
                        waitForClear.Set();
                    });
                    waitForClear.WaitOne();
                });
            }

            if (ClientNetworksEnumeratedEvent != null)
            {
                ClientNetworksEnumeratedEvent("Enumerated");
            }
        }
Beispiel #4
0
        private async Task <CompanionAppCommunication> GetNextRequest()
        {
            CompanionAppCommunication msg = null;

            await _SocketLock.WaitAsync();

            try
            {
                byte[] resp      = new byte[2048];
                var    memStream = new MemoryStream();
                var    bytes     = 0;

                do
                {
                    bytes = _NetworkStream.Read(resp, 0, resp.Length);
                    memStream.Write(resp, 0, bytes);
                } while (_NetworkStream.DataAvailable);

                ASCIIEncoding asen = new ASCIIEncoding();
                var           data = asen.GetString(memStream.ToArray());

                //
                // In this sample, protected information is sent over the channel
                // as plain text.  This data needs to be protcted with encryption
                // based on a trust relationship between the Companion App client
                // and server.
                //

                if (data.Length != 0)
                {
                    Debug.WriteLine(string.Format("incoming request {0}", data));

                    var jsonData = Newtonsoft.Json.Linq.JObject.Parse(data);
                    msg = new CompanionAppCommunication()
                    {
                        Verb = (string)jsonData["Verb"],
                        Data = (string)jsonData["Data"]
                    };
                }
            }
            finally
            {
                _SocketLock.Release();
            }
            return(msg);
        }
Beispiel #5
0
        public async Task RequestClientNetworks(ObservableCollection <Network> availableNetworks)
        {
            if (_ConnectedSocket == null)
            {
                return;
            }

            await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => {
                availableNetworks.Clear();
            });

            var networkRequest = new CompanionAppCommunication()
            {
                Verb = "GetAvailableNetworks"
            };

            // Send request for available networks
            await SendRequest(networkRequest);

            // Read response with available networks
            var networkResponse = await GetNextRequest();

            if (networkResponse != null && networkResponse.Verb == "AvailableNetworks")
            {
                var availableNetworkArray = Dejsonify(typeof(string[]), networkResponse.Data) as string[];
                availableNetworkArray.OrderBy(x => x).Distinct().ToList().ForEach(async availableNetwork => {
                    var network = new Network()
                    {
                        Ssid = availableNetwork
                    };
                    await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                    {
                        availableNetworks.Add(network);
                    });
                });
            }

            if (ClientNetworksEnumeratedEvent != null)
            {
                ClientNetworksEnumeratedEvent("Enumerated");
            }
        }
Beispiel #6
0
        private async Task <CompanionAppCommunication> GetNextRequest()
        {
            CompanionAppCommunication msg = null;

            await _SocketLock.WaitAsync();

            try
            {
                await _DataReader.LoadAsync(1024);

                string data = string.Empty;
                while (_DataReader.UnconsumedBufferLength > 0)
                {
                    data += _DataReader.ReadString(_DataReader.UnconsumedBufferLength);
                }

                //
                // In this sample, protected information is sent over the channel
                // as plain text.  This data needs to be protcted with encryption
                // based on a trust relationship between the Companion App client
                // and server.
                //

                if (data.Length != 0)
                {
                    Debug.WriteLine(string.Format("incoming request {0}", data));

                    using (var stream = new MemoryStream(Encoding.Unicode.GetBytes(data)))
                    {
                        var serializer = new DataContractJsonSerializer(typeof(CompanionAppCommunication));
                        msg = serializer.ReadObject(stream) as CompanionAppCommunication;
                    }
                }
            }
            finally
            {
                _SocketLock.Release();
            }

            return(msg);
        }
Beispiel #7
0
        private async Task SendRequest(CompanionAppCommunication communication)
        {
            //
            // In this sample, protected information is sent over the channel
            // as plain text.  This data needs to be protcted with encryption
            // based on a trust relationship between the Companion App client
            // and server.
            //
            await _SocketLock.WaitAsync();

            try
            {
                string requestData = Jsonify(typeof(CompanionAppCommunication), communication);
                _DataWriter.WriteString(requestData);
                await _DataWriter.StoreAsync();

                Debug.WriteLine(string.Format("Sent: {0}", requestData));
            }
            finally
            {
                _SocketLock.Release();
            }
        }
Beispiel #8
0
        private void WriteToSocket(CompanionAppCommunication communication)
        {
            //
            // In this sample, protected information is sent over the channel
            // as plain text.  This data needs to be protcted with encryption
            // based on a trust relationship between the Companion App client
            // and server.
            //

            _SocketLock.Wait();

            try
            {
                var           data = Jsonify(communication);
                ASCIIEncoding asen = new ASCIIEncoding();
                byte[]        ba   = asen.GetBytes(data);
                _NetworkStream.Write(ba, 0, ba.Length);
                Debug.WriteLine(string.Format("Sent: {0}", data));
            }
            finally
            {
                _SocketLock.Release();
            }
        }
Beispiel #9
0
        public async Task RequestClientNetworks(ObservableCollection <Network> availableNetworks)
        {
            if (_ConnectedSocket == null)
            {
                return;
            }

            // Assumes thread ID of main thread is 1 for Android
            var    isMainThread = (Thread.CurrentThread.ManagedThreadId == 1);
            var    waitForClear = new AutoResetEvent(false);
            Action clearAction  = () => {
                availableNetworks.Clear();
                waitForClear.Set();
            };

            if (isMainThread)
            {
                clearAction.Invoke();
            }
            else
            {
                Device.BeginInvokeOnMainThread(clearAction);
                waitForClear.WaitOne();
            }

            var networkRequest = new CompanionAppCommunication()
            {
                Verb = "GetAvailableNetworks"
            };

            // Send request for available networks
            WriteToSocket(networkRequest);

            // Read response with available networks
            var networkResponse = await GetNextRequest();

            if (networkResponse != null && networkResponse.Verb == "AvailableNetworks")
            {
                var availableNetworkArray = JsonToStringList(networkResponse.Data);
                availableNetworkArray.ForEach(availableNetwork => {
                    var network = new Network()
                    {
                        Ssid = availableNetwork
                    };
                    Action addAction = () => { availableNetworks.Add(network); };
                    if (isMainThread)
                    {
                        addAction.Invoke();
                    }
                    else
                    {
                        Device.BeginInvokeOnMainThread(addAction);
                    }
                });
            }

            if (ClientNetworksEnumeratedEvent != null)
            {
                ClientNetworksEnumeratedEvent("Enumerated");
            }
        }