-
Notifications
You must be signed in to change notification settings - Fork 0
j0z/PlayM
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
.----------------. .----------------. .----------------. .----------------. .----------------. | .--------------. || .--------------. || .--------------. || .--------------. || .--------------. | | | ______ | || | _____ | || | __ | || | ____ ____ | || | ____ ____ | | | | |_ __ \ | || | |_ _| | || | / \ | || | |_ _||_ _| | || ||_ \ / _|| | | | | |__) | | || | | | | || | / /\ \ | || | \ \ / / | || | | \/ | | | | | | ___/ | || | | | _ | || | / ____ \ | || | \ \/ / | || | | |\ /| | | | | | _| |_ | || | _| |__/ | | || | _/ / \ \_ | || | _| |_ | || | _| |_\/_| |_ | | | | |_____| | || | |________| | || ||____| |____|| || | |______| | || ||_____||_____|| | | | | || | | || | | || | | || | | | | '--------------' || '--------------' || '--------------' || '--------------' || '--------------' | '----------------' '----------------' '----------------' '----------------' '----------------' ----------------------------------------------by--------------------------------------------------- ----------------------------------------------j0z-------------------------------------------------- What is it? PlayM is a program that allows quick, easy, customizable remote control of PCs from a Windows tablet. What is it NOT? A remote desktop program. There is no video streaming support, and it is designed for local use only. Why would I want to use this? It was originally designed to allow the control of games and other software on a HTPC from the comfort of your couch. It could also prove useful in allowing you to use a tablet as a drawing/graphics tablet. NOTE: right now, pressure sensitivity (for example, from the Wacom digitizer on the Surface Pro) is not supported, although that is something I'm looking into. ------------------------------------------------------------------------------------------------------ Right now, this is more of a proof-of-concept than anything else. Basic functionality is missing, and the GUI on both the server and client are something I threw together just to see if it would work. To-Do/Planned features: Proper mouse support. A customizable button layout, probably in the form of several prebuilt arrangements for specific uses (FPS games, media playback, etc) Proper server GUI Win8 "Metro" support Support for modifier keys Pressure sensitivity support Current Issues: * The trackpad included in the Legacy controller produces bad jitters in the camera of FPS games, rendering them all but unplayable. However, it works for normal mouse usage. * Buttons on the Legacy controller can "stick" if your finger leaves the button while it is depressed * The server GUI is completely worthless. * There is no protection against connection of multiple clients (or proper handling at all). * The server cannot handle mouse button holds. * Client crashes if disconnected from the server. ------------------------------------------------------------------------------------------------------- The following is an explaination for how this thing works, and hopefully will allow developers to easily communicate with the server. My hope is that clients can be built for all major platforms, allowing you to control your PC from any device. Developers: The PlayM solution contains 2 projects: PlayM_GUI and PlayM_Controller_Legacy. PlayM_GUI is the (poorly-named) server project, the other is an example controller, made using WPF. My ultimate goal was to have the main client be a metro app, with this program being a fallback (hence, 'legacy'). -----PlayM_GUI------ The actual interface portion of the server doesn't do anything at the moment, it is merely a placeholder. When you start it up it listens on port 3000 for clients. There is currently no protection from multiple client connections, this needs to be fixed. When a client connects, it is spun off onto a seperate thread, and the server begins listening for commands. See the "PLAYM PROTOCOL" section for an explaination of the protocol used. The server parses the commands in the InputSynth class, and then uses the InputManager library (see link at the bottom of this document) to actually send the commands to the system. InputManager works at a very low level, and so the keys and mouse will be registered system-wide (including in DirectX games). -----PlayM_Controller_Legacy------ This is a simple proof-of-concept client controller, and so is of limited usefulness. Button presses are sent to Client.send(), where they are formatted properly and then sent to the server. Be sure to change the IP address in PlayM_Controller_Legacy.Client if you're going to use it. ----------PlayM Protocol------------ PlayM uses a very simple protocol to communicate between the client and server. Currently, there is no registering of clients, and the server has no idea which client is which if multiple clients are connected. A message is composed of three pieces of data: [type];[message];[hold] Messages are terminated by a newline. [type] is either 'KB' or 'M' 'KB' is sent for a keyboard button press. Also used for Mouse button presses. (See note below) 'M' is sent for either mouse movement. [message] specifies which key was pressed (as a single, capital character) or as a comma-deliminated tuple of type <str,str> in the case of a mouse, giving its x and y coordinates. [hold] is only used for keyboard messages, and can only have the following values: * 0 = (default) the button press was a click. * 1 = the user has pushed the button down, and has not let up. * 2 = the user has released the button. Examples: The user clicked the key "A" KB;"A";0 \n The user pressed "A" KB;"A";1 \n The user released "A" KB;"A";2 \n The user moved their thumb to position 345,230 M;345,230;0 \n Yes, the trailing '0' is still needed for mouse movement. ----Mouse Button Presses---- Currently, mouse button clicks are sent as keyboard messages (with the "KB" type). I'm not too happy about this, because it is counter-intuitive, but the KB input function easily handles it, while it would take some reengineering to make the mouse input function accept it. I'll probably change this eventually, but it'll have to do for now. You'll need to include the following to be able to compile PlayM: 3rd Party Libraries: http://www.codeproject.com/Articles/117657/InputManager-library-Track-user-input-and-simulate .NET 3.5 (Server) .NET 4.5 (Legacy Controller) Developed using VS2013 --------------CHANGELOG------------------- v0.6a + Mouse button (click) support v0.5a + Initial Release
About
No description, website, or topics provided.
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published