Ejemplo n.º 1
0
        public async static Task <Message> GetAsync(NeoSocket neoSocket)
        {
            var message = new Message();
            var ms      = message.ms;

            ms.SetLength(0);
            var first  = true;
            var size   = 4;
            var buffer = new byte[1024];

            while (ms.Length < size)
            {
                var block = await neoSocket.ReadAsync(buffer, 0, (int)Math.Min(buffer.Length, size - ms.Length));

                ms.Write(buffer, 0, block);

                if ((first) && (ms.Length == size))
                {
                    first = false;
                    size  = BitConverter.ToInt32(ms.GetBuffer(), 0);
                }
            }
            ms.Position = 4;

            return(message);
        }
Ejemplo n.º 2
0
        async void Reader(NeoSocket neoSocket, AsyncQueue <byte[]> queue)
        {
            try
            {
                while (neoSocket.Connected)
                {
                    var webRequest = await WebRequest.GetAsync(neoSocket);

                    string localPath = webRequest.RequestUri.LocalPath;
                    switch (localPath)
                    {
                    case "/": SendIndex(queue); break;

                    case "/NeoRemote.apk": SendAPK(queue); break;

                    case "/favicon.ico": SendFavicon(queue); break;

                    case "/RunNeoRemote": await RunNeoRemote(neoSocket, queue); break;

                    default: throw new Exception("Invalid query");
                    }
                }
            }
            catch { }
            neoSocket.Close();
            queue.SetFinished();
        }
Ejemplo n.º 3
0
 async void Writer(NeoSocket neoSocket, AsyncQueue <byte[]> queue)
 {
     try
     {
         while (await queue.HasItemsAsync())
         {
             var buffer = queue.Dequeue();
             await neoSocket.WriteAsync(buffer, 0, buffer.Length);
         }
     }
     catch { queue.SetFinished(); }
     finally { neoSocket.Close(); }
 }
Ejemplo n.º 4
0
        async Task RunNeoRemote(NeoSocket neoSocket, AsyncQueue <byte[]> queue)
        {
            neoRemoteQueues.Add(queue);
            try
            {
                OnConnect?.Invoke(queue);
                while (true)
                {
                    var message = await Message.GetAsync(neoSocket);

                    OnMessage?.Invoke(message, queue);
                }
            }
            finally { neoRemoteQueues.Remove(queue); }
        }
Ejemplo n.º 5
0
        async void RunBluetoothListener()
        {
            BluetoothListener listener;

            try
            {
                listener = new BluetoothListener(new Guid("{05e9b9dd-1688-4785-bb1d-1c750034157b}"));
                listener.Start();
            }
            catch
            {
                MessageBox.Show($"Unable to connect to bluetooth");
                return;
            }
            while (true)
            {
                var neoSocket = new NeoSocket(await Task.Run(() => listener.AcceptBluetoothClient()));
                var queue     = new AsyncQueue <byte[]>();
                Reader(neoSocket, queue);
                Writer(neoSocket, queue);
            }
        }
Ejemplo n.º 6
0
        async void RunTcpListener(int port)
        {
            TcpListener listener;

            try
            {
                listener = new TcpListener(IPAddress.Any, port);
                listener.Start();
            }
            catch
            {
                MessageBox.Show($"Unable to connect to port {port}");
                return;
            }
            while (true)
            {
                var neoSocket = new NeoSocket(await listener.AcceptTcpClientAsync());
                var queue     = new AsyncQueue <byte[]>();
                Reader(neoSocket, queue);
                Writer(neoSocket, queue);
            }
        }