public void ProcessCommand(CommandType type)
        {
            try
            {
                switch (type)
                {
                /*case CommandType.SHOW_WINDOWS_KEYBOARD:
                 *  ShowWindowsKeyboard();
                 *  break;*/
                case CommandType.REBOOT_PC:
                    serverHandler.DisconnectClient();
                    serverHandler.Stop();
                    Process.Start("shutdown", "/r /t 0");
                    break;

                case CommandType.TURN_OFF_PC:
                    serverHandler.DisconnectClient();
                    serverHandler.Stop();
                    Process.Start("shutdown", "/s /t 0");
                    break;
                }
            }
            catch
            {
                LdpLog.Error("Executing command error.");
            }
        }
        public void Handle(LdpPacket packet)
        {
            switch (packet.Type)
            {
            case PacketType.SCREEN_REQUEST:
                /*ThreadPool.QueueUserWorkItem(new WaitCallback((s) =>
                 * {
                 *  GetScreen();
                 * }));*/
                //if (ScreenThread != null && ScreenThread.IsAlive)
                //ScreenThread.Join();
                ScreenThread = new Thread(() => GetScreen());
                ScreenThread.Start();
                break;

            case PacketType.DISCONNECT_REQUEST:
                var result = packet.DisconnectRequest;
                switch (result.Type)
                {
                case DisconnectionType.FROM_SCREEN_THREAD:
                    interruptGrabbing = false;
                    LdpLog.Info("Exiting screen thread.");
                    serverHandler.GetListenerChannel.RemoveListener(this);
                    break;
                }
                break;
            }
        }
Пример #3
0
        private void InitGrabber()
        {
            try
            {
                this.pixelFormat = PixelFormat.Format32bppRgb;
                boundsRect       = new System.Drawing.Rectangle(0, 0, WIDTH, HEIGHT);

                var format = SharpDX.Direct3D9.Format.A8R8G8B8;
                SharpDX.Direct3D9.PresentParameters present_params = new SharpDX.Direct3D9.PresentParameters();
                present_params.Windowed         = true;
                present_params.BackBufferFormat = format;
                present_params.SwapEffect       = SharpDX.Direct3D9.SwapEffect.Discard;
                present_params.BackBufferWidth  = WIDTH;
                present_params.BackBufferHeight = HEIGHT;
                dx9Device = new SharpDX.Direct3D9.Device(new SharpDX.Direct3D9.Direct3D(),
                                                         0,
                                                         SharpDX.Direct3D9.DeviceType.Hardware,
                                                         IntPtr.Zero,
                                                         SharpDX.Direct3D9.CreateFlags.HardwareVertexProcessing,
                                                         present_params);

                dx9Device.SetRenderState(RenderState.CullMode, Cull.None);
                dx9Device.SetRenderState(RenderState.Lighting, false);
                dx9Device.SetRenderState(RenderState.AntialiasedLineEnable, false);
            }
            catch (SharpDX.SharpDXException dxe)
            {
                LdpLog.Error("SharpDX InitializeDX9\n" + dxe.Message);
            }
            catch (Exception ex)
            {
                LdpLog.Error("InitializeDX9\n" + ex.Message);
            }
        }
Пример #4
0
        public void SetPassword(string password)
        {
            Settings.Default.Password = password;
            Settings.Default.Save();
            string success = "User settings: password updated successfully.";

            LdpLog.Info(success);
        }
 private void StartListening()
 {
     while (client_connected)
     {
         Handle();
     }
     LdpLog.Info("Listener thread stopped.");
 }
 public LdpPacketListener()
 {
     serverHandler    = LdpServer.GetInstance();
     client_connected = true;
     listening_thread = new Thread(() => StartListening());
     listening_thread.Start();
     LdpLog.Info("Listener thread started.");
 }
 public void RemoveListener(ILdpPacketHandler listener)
 {
     if (listeners.Contains(listener))
     {
         listener.Dispose();
         listeners.Remove(listener);
         LdpLog.Info(String.Format("Listener removed: {0}.", listener.GetType()));
         listener = null;
     }
 }
        private void PrintServerStarting()
        {
            string text = "Try to use one of the following IP:\n";

            foreach (var ip in GetLocalIpAddressList())
            {
                text += ip + "\n";
            }
            LdpLog.Info(text);
            LdpLabelStatus.GetInstance().StateText = text;
        }
Пример #9
0
 public void Start(int port)
 {
     try
     {
         this.PORT = port;
         base.StartServer(port);
     }
     catch (Exception ex)
     {
         LdpLog.Error("Starting server error:\n" + ex.Message);
         Stop();
     }
 }
        private void GetScreen()
        {
            lock (LOCK)
            {
                try
                {
                    Rectangle bounds = Rectangle.Empty;
                    interruptGrabbing = false;

                    while (!interruptGrabbing)
                    {
                        nextScreen = screenGrabber.GetScreenShot();
                        if (nextScreen == null)
                        {
                            break;
                        }
                        bounds = LdpScreenProcessingUtils.GetBoundingBoxForChanges(nextScreen, prevScreen);

                        if (bounds != Rectangle.Empty)
                        {
                            interruptGrabbing = true;
                            CheckRectangleBounds(ref bounds);
                            difference = LdpScreenProcessingUtils.CopyRegion(nextScreen, bounds);

                            origData   = LdpScreenProcessingUtils.ImageToByteArray(difference);
                            baseLenght = origData.Length;
                            compressed = LZ4Codec.Encode(origData, 0, baseLenght);

                            rect        = LdpRectangle.CreateBuilder();
                            rect.Left   = bounds.Left;
                            rect.Top    = bounds.Top;
                            rect.Right  = bounds.Right;
                            rect.Bottom = bounds.Bottom;

                            SendScreenResponse(compressed, baseLenght, rect);

                            difference.Dispose();
                            difference = null;
                            rect       = null;
                            origData   = null;
                            compressed = null;
                        }
                        prevScreen = nextScreen;
                    }
                }
                catch (Exception ex)
                {
                    LdpLog.Error("GetScreen thrown:\n" + ex.Message);
                }
            }
        }
 public void RemoveListeners()
 {
     if (listeners != null && listeners.Count != 0)
     {
         for (int i = listeners.Count - 1; i >= 0; i--)
         {
             LdpLog.Info(String.Format("Listener removed: {0}.",
                                       listeners[i].GetType()));
             listeners[i].Dispose();
             listeners[i] = null;
             listeners.Remove(listeners[i]);
         }
     }
 }
        protected override void Handle()
        {
            try
            {
                using (var stream = new NetworkStream(serverHandler.GetSocketChannel))
                {
                    var packet = LdpPacket.ParseDelimitedFrom(stream);

                    ProcessPacket(packet);
                    //base - notify to all subscribers
                    NotifyToAllListeners(packet);
                    //stream.Close();
                }
            }
            catch (IOException ioexc)
            {
                string error =
                    String.Format(@"LdpPacketListener IOException: 
                                    Handle() method throw:\n{0}.", ioexc.Message);
                LdpLog.Error(error);
                Restart();
            }
            catch (SocketException sockexc)
            {
                switch (sockexc.ErrorCode)
                {
                case CLIENT_DISCON_ERROR_CODE:
                    LdpLog.Info("LdpPacketListener: client disconnected.");
                    Restart();
                    break;

                default:
                    string error =
                        String.Format(@"LdpPacketListener SocketException: 
                                    Handle() method throw:\n{0}.", sockexc.Message);
                    LdpLog.Error(error);
                    Restart();
                    break;
                }
            }
            catch (Exception ex)
            {
                string error =
                    String.Format(@"LdpPacketListener Exception: 
                                    Handle() method throw:\n{0}.", ex.Message);
                LdpLog.Error(error);
                Restart();
            }
        }
        protected void DisconntectClientFromServer()
        {
            if (clientSocket != null && clientSocket.Connected)
            {
                try
                {
                    var factory = new LdpProtocolPacketFactory();
                    var list    = packetListener.GetListenersList;
                    LdpDisconnectRequest disconnectPacket = null;
                    LdpPacket            packet           = null;
                    const int            TIMEOUT          = 100;
                    if (list != null && list.Count != 0)
                    {
                        foreach (var item in list)
                        {
                            if (item is LdpRemoteDesktopSender)
                            {
                                disconnectPacket = factory
                                                   .SetDisconnectRequest(DisconnectionType.FROM_SCREEN_THREAD);
                                packet = factory.BuildPacket(disconnectPacket);
                                packetSender.Send(packet);
                                Thread.Sleep(TIMEOUT);
                                break;
                            }
                            else if (item is LdpRemoteVolumeSender)
                            {
                                disconnectPacket = factory
                                                   .SetDisconnectRequest(DisconnectionType.FROM_VOLUME_THREAD);
                                packet = factory.BuildPacket(disconnectPacket);
                                packetSender.Send(packet);
                                Thread.Sleep(TIMEOUT);
                                break;
                            }
                        }
                    }

                    disconnectPacket = factory
                                       .SetDisconnectRequest(DisconnectionType.FROM_SERVER);
                    packet = factory.BuildPacket(disconnectPacket);
                    packetSender.Send(packet);
                    disconnectPacket = null;
                    packet           = null;
                }
                catch (Exception exc)
                {
                    LdpLog.Error("DisconntectClient error.\n" + exc.Message);
                }
            }
        }
Пример #14
0
        private void InitGrabber()
        {
            try
            {
                this.pixelFormat = PixelFormat.Format32bppRgb;
                boundsRect       = new System.Drawing.Rectangle(0, 0, WIDTH, HEIGHT);

                uint numAdapter = 0;   // # of graphics card adapter
                uint numOutput  = 0;   // # of output device (i.e. monitor)

                // create device and factory
                dx11Device  = new SharpDX.Direct3D11.Device(SharpDX.Direct3D.DriverType.Hardware);
                dx11Factory = new Factory1();
                dx11Output  = new Output1(dx11Factory.Adapters1[numAdapter].Outputs[numOutput].NativePointer);

                // creating CPU-accessible texture resource
                dx11Texture2Ddescr = new SharpDX.Direct3D11.Texture2DDescription();
                dx11Texture2Ddescr.CpuAccessFlags            = SharpDX.Direct3D11.CpuAccessFlags.Read;
                dx11Texture2Ddescr.BindFlags                 = SharpDX.Direct3D11.BindFlags.None;
                dx11Texture2Ddescr.Format                    = SharpDX.DXGI.Format.B8G8R8A8_UNorm;
                dx11Texture2Ddescr.Height                    = HEIGHT;
                dx11Texture2Ddescr.Width                     = WIDTH;
                dx11Texture2Ddescr.OptionFlags               = SharpDX.Direct3D11.ResourceOptionFlags.None;
                dx11Texture2Ddescr.MipLevels                 = 1;
                dx11Texture2Ddescr.ArraySize                 = 1;
                dx11Texture2Ddescr.SampleDescription.Count   = 1;
                dx11Texture2Ddescr.SampleDescription.Quality = 0;
                dx11Texture2Ddescr.Usage                     = SharpDX.Direct3D11.ResourceUsage.Staging;
                dx11ScreenTexture = new SharpDX.Direct3D11.Texture2D(dx11Device, dx11Texture2Ddescr);

                // duplicate output stuff

                dx11DuplicatedOutput = dx11Output.DuplicateOutput(dx11Device);
            }
            catch (SharpDX.SharpDXException dxe)
            {
                string error = "Directx 11 initializer error.\n" + dxe.Message;
                LdpLog.Error(error);
                MessageBox.Show(error, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
            catch (Exception ex)
            {
                string error = "Directx 11 initializer error.\n" + ex.Message;
                LdpLog.Error(error);
                MessageBox.Show(error, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
        protected void StopServer()
        {
            try
            {
                Cleanup();
                if (serverSocket != null)
                {
                    LdpLog.Info("Server shutdown.");
                    if (clientSocket != null && clientSocket.Connected)
                    {
                        clientSocket.Shutdown(SocketShutdown.Both);
                        clientSocket.Close();
                        clientSocket.Dispose();
                    }
                    serverSocket.Close();
                    serverSocket.Dispose();
                }
            }
            catch (SocketException sockexc)
            {
                LdpLog.Error("Server shutdown thrown:\n" + sockexc.Message);
            }
            catch (Exception ex)
            {
                LdpLog.Error("Server shutdown thrown:\n" + ex.Message);
            }
            finally
            {
                clientSocket = null;
                serverSocket = null;
            }

            try
            {
                if (serverThread != null)
                {
                    serverThread.Abort();
                    serverThread = null;
                }
            }
            catch { LdpLog.Error("ServerThread interrupted."); }
            GC.Collect();
        }
Пример #16
0
        private Bitmap GetDX9ScreenShot()
        {
            try
            {
                screenShot       = null;
                screenShot       = new System.Drawing.Bitmap(WIDTH, HEIGHT, pixelFormat);
                dx9ScreenSurface = SharpDX.Direct3D9.Surface.CreateOffscreenPlain(
                    dx9Device,
                    WIDTH,
                    HEIGHT,
                    SharpDX.Direct3D9.Format.A8R8G8B8,
                    Pool.SystemMemory);

                dx9Device.GetFrontBufferData(0, dx9ScreenSurface);

                dx9Map  = dx9ScreenSurface.LockRectangle(LockFlags.None);
                bmpData = screenShot.LockBits(boundsRect,
                                              System.Drawing.Imaging.ImageLockMode.WriteOnly, screenShot.PixelFormat);

                var sourcePtr = dx9Map.DataPointer;
                var destPtr   = bmpData.Scan0;
                for (int y = 0; y < HEIGHT; y++)
                {
                    // Copy a single line
                    Utilities.CopyMemory(destPtr, sourcePtr, ARGB_WIDTH);
                    // Advance pointers
                    sourcePtr = IntPtr.Add(sourcePtr, dx9Map.Pitch);
                    destPtr   = IntPtr.Add(destPtr, bmpData.Stride);
                }

                screenShot.UnlockBits(bmpData);
                dx9ScreenSurface.UnlockRectangle();
                dx9ScreenSurface.Dispose();
                bmpData = null;
                GC.Collect();
                return(screenShot);
            }
            catch (Exception ex)
            {
                LdpLog.Error("GetDX9ScreenShot error.\n" + ex.Message);
                return(screenShot = null);
            }
        }
Пример #17
0
        private void CheckPassword(string requestPassword)
        {
            if (requestPassword == settingsPassword)
            {
                infoRequest = new LdpClientInfoRequestHandler();

                authResponse   = packetFactory.SetAuthResponse(true);
                responsePacket = packetFactory.BuildPacket(authResponse);
                serverHandler.GetSenderChannel.Send(responsePacket);
                LdpLog.Info("Auth successfull.");
                serverHandler.GetListenerChannel.RemoveListener(this);
            }
            else
            {
                authResponse   = packetFactory.SetAuthResponse(false);
                responsePacket = packetFactory.BuildPacket(authResponse);
                serverHandler.GetSenderChannel.Send(responsePacket);
                LdpLog.Info("Auth failed: wrong password.");
                serverHandler.GetListenerChannel.RemoveListener(this);
            }
        }
Пример #18
0
 public void Send(LdpPacket packet)
 {
     try
     {
         using (var stream = new NetworkStream(serverHandler.GetSocketChannel))
         {
             packet.WriteDelimitedTo(stream);
         }
     }
     catch (IOException ioexc)
     {
         LdpLog.Error("Send packet error:\n" + ioexc.Message);
     }
     catch (SocketException sockexc)
     {
         LdpLog.Error("Send packet error:\n" + sockexc.Message);
     }
     catch (Exception ex)
     {
         LdpLog.Error("Send packet error:\n" + ex.Message);
     }
 }
        protected List <string> GetLocalIpAddressList()
        {
            var tmp = new List <string>();

            try
            {
                IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());
                foreach (IPAddress ip in host.AddressList)
                {
                    if (ip.AddressFamily == AddressFamily.InterNetwork)
                    {
                        tmp.Add(ip.ToString());
                    }
                }
                return(tmp);
            }
            catch (SocketException sockexc)
            {
                LdpLog.Error("Getting IP address list error:\n" + sockexc.Message);
                return(new List <string>());
            }
        }
        private void InitializeServer(int port)
        {
            try
            {
                serverSocket = new Socket(AddressFamily.InterNetwork,
                                          SocketType.Stream, ProtocolType.Tcp);
                IPEndPoint serverIPEP = new IPEndPoint(IPAddress.Any, port);
                serverSocket.Bind(serverIPEP);
                serverSocket.Listen(MAX_CONNECTIONS_PENDING);

                PrintServerStarting();

                //incoming connection
                clientSocket   = serverSocket.Accept();
                clientEndPoint = (IPEndPoint)clientSocket.RemoteEndPoint;
                clientIP       = clientEndPoint.Address.ToString();

                LdpLog.Info(String.Format("Incoming connection: {0}.\nWaiting auth request..",
                                          clientSocket.LocalEndPoint));
                AddServerHandlers();
            }
            catch (SocketException sockexc)
            {
                switch (sockexc.ErrorCode)
                {
                //closing server
                case SERVER_CLOSING_CODE:
                    LdpLog.Info("Closing server.");
                    StopServer();
                    break;

                default:
                    LdpLog.Error("Starting server error:\n" + sockexc.Message);
                    StopServer();
                    break;
                }
            }
        }
        public void SendKey(string key, KeyboardKey type)
        {
            try
            {
                switch (type)
                {
                case KeyboardKey.KEY_TEXT:
                    Send(key);
                    break;

                case KeyboardKey.KEY_ENTER:
                    SendKeys.SendWait(LdpKeys.ENTER);
                    break;

                case KeyboardKey.KEY_DEL:
                    SendKeys.SendWait(LdpKeys.BACKSPACE);
                    break;
                }
            }
            catch
            {
                LdpLog.Error("SendKeys unhandled key: " + key);
            }
        }
Пример #22
0
 public void Restart()
 {
     LdpLog.Info("Restarting the server.");
     base.StopServer();
     base.StartServer(DEFAULT_PORT_NUMBER);
 }
Пример #23
0
        private Bitmap GetDX11ScreenShot()
        {
            try
            {
                screenShot = null;
                screenShot = new Bitmap(WIDTH, HEIGHT, this.pixelFormat);
                if (dx11DuplicatedOutput != null)
                {
                    dx11DuplicatedOutput.AcquireNextFrame(NEXT_FRAME_TIMEOUT,
                                                          out dx11DuplFrameInfo, out dx11ScreenResource);

                    dx11Device.ImmediateContext
                    .CopyResource(dx11ScreenResource.QueryInterface <SharpDX.Direct3D11.Resource>(),
                                  dx11ScreenTexture);

                    // cast from texture to surface, so we can access its bytes
                    dx11ScreenSurface = dx11ScreenTexture.QueryInterface <SharpDX.DXGI.Surface>();
                    // map the resource to access it
                    dx11Map = dx11ScreenSurface.Map(SharpDX.DXGI.MapFlags.Read);
                    bmpData = screenShot.LockBits(boundsRect, ImageLockMode.WriteOnly, screenShot.PixelFormat);
                    var sourcePtr = dx11Map.DataPointer;
                    var destPtr   = bmpData.Scan0;
                    for (int y = 0; y < HEIGHT; y++)
                    {
                        // Copy a single line
                        Utilities.CopyMemory(destPtr, sourcePtr, ARGB_WIDTH);
                        // Advance pointers
                        sourcePtr = IntPtr.Add(sourcePtr, dx11Map.Pitch);
                        destPtr   = IntPtr.Add(destPtr, bmpData.Stride);
                    }

                    dx11Device.ImmediateContext.UnmapSubresource(dx11ScreenTexture, 0);
                    screenShot.UnlockBits(bmpData);
                    dx11ScreenSurface.Unmap();
                    dx11ScreenSurface.Dispose();
                    dx11ScreenResource.Dispose();
                    dx11DuplicatedOutput.ReleaseFrame();
                }
                else
                {
                    return(screenShot = null);
                }

                dx11ScreenSurface = null;
                bmpData           = null;
                GC.Collect();

                return(screenShot);
            }
            catch (SharpDX.SharpDXException e)
            {
                if (e.ResultCode.Code == SharpDX.DXGI.ResultCode.WaitTimeout.Result.Code)
                {
                    //screen does not changed
                    LdpLog.Warning("DX11 surface timeout.. Recursion is coming:)");
                    return(GetDX11ScreenShot());
                }
                else
                {
                    return(screenShot = null);
                }
            }
            catch (Exception ex)
            {
                LdpLog.Error("GetDX11ScreenShot\n" + ex.Message);
                return(screenShot = null);
            }
        }