Example #1
0
        static void Main(string[] args)
        {
            if (args.Length != 3 && args.Length != 1 && args.Length != 2 && args.Length != 4)
            {
                Console.WriteLine("Usage:   StreamTerminal [<email> <password>] <device_id> [--echo]");
                Console.WriteLine("Example: StreamTerminal.exe echo.u.nabto.net");
                Console.WriteLine("         When the stream to echo.u.nabto.net is created select the echo service by typing 'echo<enter>' at the prompt.");
                Console.WriteLine("         Default user is 'guest'.");
                Console.WriteLine("         To enable local echo use the '--echo' switch.");
                Environment.Exit(1);
            }

            string email    = "guest";
            string password = "";
            string deviceId = "";

            if (args[0].Contains("@"))
            {
                email    = args[0];
                password = args[1];
                deviceId = args[2];
            }
            else
            {
                deviceId = args[0];
            }

            var localEcho = false;

            if (args[args.Length - 1] == "--echo")
            {
                localEcho = true;
            }

            if (!deviceId.Contains("."))
            {
                throw new Exception("Invalid device ID");
            }

            Console.WriteLine("Connecting...");

            try
            {
                Console.WriteLine("Starting Nabto...");
                NabtoClient nabto = new NabtoClient(); // Get a reference to the Nabto client runtime and start it up.

                Console.WriteLine("Creating session...");
                using (Session session = nabto.CreateSession(email, password)) // Create a session using the specified user credentials.
                {
                    Console.WriteLine("Creating connection to device...");
                    using (DeviceConnection deviceConnection = session.CreateDeviceConnection(deviceId)) // create connection to device
                    {
                        Console.WriteLine("Creating stream...");
                        using (DeviceStream stream = deviceConnection.CreateStream()) // create stream to device
                        {
                            var encoding      = new UTF8Encoding();
                            var run           = true;
                            var buffer        = new byte[1500];
                            var stringBuilder = new StringBuilder();

                            Console.WriteLine("Connected. Press ctrl+ยจ to disconnect.");

                            while (run)
                            {
                                if (stream.DataAvailable)                                // data received from device?
                                {
                                    var length  = stream.Read(buffer, 0, buffer.Length); // read data into buffer
                                    var message = encoding.GetString(buffer, 0, length); // convert to text
                                    Console.Write(message);
                                }

                                if (Console.KeyAvailable)        // user input?
                                {
                                    while (Console.KeyAvailable) // read all user input
                                    {
                                        var key = Console.ReadKey(true);
                                        if (key.KeyChar == 0x1d) // terminate
                                        {
                                            run = false;
                                            Console.WriteLine();
                                            Console.WriteLine("Disconnecting...");
                                        }
                                        else if (key.Key == ConsoleKey.Enter)
                                        {
                                            stringBuilder.Append(Environment.NewLine);
                                        }
                                        else
                                        {
                                            stringBuilder.Append(key.KeyChar); // gather all characters from user
                                        }
                                    }

                                    if (stringBuilder.Length > 0)
                                    {
                                        var s = stringBuilder.ToString(); // text from user
                                        stringBuilder.Clear();

                                        var b = encoding.GetBytes(s); // convert to byte array
                                        stream.Write(b, 0, b.Length); // ...and send it to the device

                                        if (localEcho)
                                        {
                                            Console.Write(s);
                                        }
                                    }
                                }

                                Thread.Sleep(1);
                            }
                        }
                    }
                }

                Console.WriteLine("Disconnected.");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }