<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Wireless-X: Wireless-X_server.py File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="ic_launcher.png"/></td>
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Wireless-X
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#func-members">Functions</a> &#124;
<a href="#var-members">Variables</a>  </div>
  <div class="headertitle">
<div class="title">Wireless-X_server.py File Reference</div>  </div>
</div><!--header-->
<div class="contents">

<p>This includes the code for the server-side of Wireless-X.  
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a89ff6223b623131684a93295f32bc976"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a89ff6223b623131684a93295f32bc976">Wireless-X_server.bind_sockets</a> ()</td></tr>
<tr class="memdesc:a89ff6223b623131684a93295f32bc976"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function establishes two sockets for receiving camera frames as well as mouse and keyboard actions.  <a href="Wireless-X__server_8py.html#a89ff6223b623131684a93295f32bc976">More...</a><br /></td></tr>
<tr class="separator:a89ff6223b623131684a93295f32bc976"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6db0464af01126b82f9ff27839b4d236"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a6db0464af01126b82f9ff27839b4d236">Wireless-X_server.mouse_keyboard_connections</a> ()</td></tr>
<tr class="memdesc:a6db0464af01126b82f9ff27839b4d236"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function decodes the received mouse and keyboard actions and acts accordingly.  <a href="Wireless-X__server_8py.html#a6db0464af01126b82f9ff27839b4d236">More...</a><br /></td></tr>
<tr class="separator:a6db0464af01126b82f9ff27839b4d236"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa577d8e17a9ed9e9765dfad47310f8e4"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#aa577d8e17a9ed9e9765dfad47310f8e4">Wireless-X_server.camera_stream_connections</a> ()</td></tr>
<tr class="memdesc:aa577d8e17a9ed9e9765dfad47310f8e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function is responsible for handling the camera frames.  <a href="Wireless-X__server_8py.html#aa577d8e17a9ed9e9765dfad47310f8e4">More...</a><br /></td></tr>
<tr class="separator:aa577d8e17a9ed9e9765dfad47310f8e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a79901b301ca92aaf0cf102d9eb534a91"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a79901b301ca92aaf0cf102d9eb534a91">Wireless-X_server.listening_connections</a> ()</td></tr>
<tr class="memdesc:a79901b301ca92aaf0cf102d9eb534a91"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function is responsible for listening to connections.  <a href="Wireless-X__server_8py.html#a79901b301ca92aaf0cf102d9eb534a91">More...</a><br /></td></tr>
<tr class="separator:a79901b301ca92aaf0cf102d9eb534a91"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
Variables</h2></td></tr>
<tr class="memitem:ab168597dce547df306f8cef48714f256"><td class="memItemLeft" align="right" valign="top"><a id="ab168597dce547df306f8cef48714f256"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#ab168597dce547df306f8cef48714f256">Wireless-X_server.virtualCamera</a> = subprocess.run([&quot;sudo&quot;, &quot;modprobe&quot;, &quot;v4l2loopback&quot;, &quot;devices=1&quot;, &quot;video_nr=20&quot;, &quot;card_label='Wireless-X Camera'&quot;, &quot;exclusive_caps=1&quot;])</td></tr>
<tr class="memdesc:ab168597dce547df306f8cef48714f256"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a virtual camera on the laptop/PC. <br /></td></tr>
<tr class="separator:ab168597dce547df306f8cef48714f256"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af68defefb623d24f4e1976c3a061bf98"><td class="memItemLeft" align="right" valign="top"><a id="af68defefb623d24f4e1976c3a061bf98"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#af68defefb623d24f4e1976c3a061bf98">Wireless-X_server.width</a></td></tr>
<tr class="memdesc:af68defefb623d24f4e1976c3a061bf98"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the width of the screen. <br /></td></tr>
<tr class="separator:af68defefb623d24f4e1976c3a061bf98"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5fbc4cec3d85ed72e2b15df06cc732fc"><td class="memItemLeft" align="right" valign="top"><a id="a5fbc4cec3d85ed72e2b15df06cc732fc"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a5fbc4cec3d85ed72e2b15df06cc732fc">Wireless-X_server.height</a></td></tr>
<tr class="memdesc:a5fbc4cec3d85ed72e2b15df06cc732fc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the height of the screen. <br /></td></tr>
<tr class="separator:a5fbc4cec3d85ed72e2b15df06cc732fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaebd0084b5c865b4d6ee83691622e178"><td class="memItemLeft" align="right" valign="top"><a id="aaebd0084b5c865b4d6ee83691622e178"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#aaebd0084b5c865b4d6ee83691622e178">Wireless-X_server.curr_x</a></td></tr>
<tr class="memdesc:aaebd0084b5c865b4d6ee83691622e178"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the x-coordinate of the current mouse location. <br /></td></tr>
<tr class="separator:aaebd0084b5c865b4d6ee83691622e178"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a764bc7fd7cda5a9c302abbd1c0b9ce9d"><td class="memItemLeft" align="right" valign="top"><a id="a764bc7fd7cda5a9c302abbd1c0b9ce9d"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a764bc7fd7cda5a9c302abbd1c0b9ce9d">Wireless-X_server.curr_y</a></td></tr>
<tr class="memdesc:a764bc7fd7cda5a9c302abbd1c0b9ce9d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the y-coordinate of the current mouse location. <br /></td></tr>
<tr class="separator:a764bc7fd7cda5a9c302abbd1c0b9ce9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1450e29f8b058a690ac172cb516bd558"><td class="memItemLeft" align="right" valign="top"><a id="a1450e29f8b058a690ac172cb516bd558"></a>
def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a1450e29f8b058a690ac172cb516bd558">Wireless-X_server.remote_x</a> = curr_x/2</td></tr>
<tr class="memdesc:a1450e29f8b058a690ac172cb516bd558"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the mid of x-coordinate of current mouse location. <br /></td></tr>
<tr class="separator:a1450e29f8b058a690ac172cb516bd558"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adeae735ccc3dbb8abd29b300dbc830eb"><td class="memItemLeft" align="right" valign="top"><a id="adeae735ccc3dbb8abd29b300dbc830eb"></a>
def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#adeae735ccc3dbb8abd29b300dbc830eb">Wireless-X_server.remote_y</a> = curr_y/2</td></tr>
<tr class="memdesc:adeae735ccc3dbb8abd29b300dbc830eb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the mid of y-coordinate of current mouse location. <br /></td></tr>
<tr class="separator:adeae735ccc3dbb8abd29b300dbc830eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a91f42afd61bbcbd6f88f4f9d0ac3cb45"><td class="memItemLeft" align="right" valign="top"><a id="a91f42afd61bbcbd6f88f4f9d0ac3cb45"></a>
string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a91f42afd61bbcbd6f88f4f9d0ac3cb45">Wireless-X_server.s</a> = ''</td></tr>
<tr class="memdesc:a91f42afd61bbcbd6f88f4f9d0ac3cb45"><td class="mdescLeft">&#160;</td><td class="mdescRight">Socket used for receiving keyboard and mouse related actions. <br /></td></tr>
<tr class="separator:a91f42afd61bbcbd6f88f4f9d0ac3cb45"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a45dcde7bcdcb4693f7800b933f376ee0"><td class="memItemLeft" align="right" valign="top"><a id="a45dcde7bcdcb4693f7800b933f376ee0"></a>
string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a45dcde7bcdcb4693f7800b933f376ee0">Wireless-X_server.cameraSocket</a> = ''</td></tr>
<tr class="memdesc:a45dcde7bcdcb4693f7800b933f376ee0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Socket used for receiving the camera frames of user's smartphone. <br /></td></tr>
<tr class="separator:a45dcde7bcdcb4693f7800b933f376ee0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afa870e05abcd643a6414cb70bbe57cc6"><td class="memItemLeft" align="right" valign="top"><a id="afa870e05abcd643a6414cb70bbe57cc6"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#afa870e05abcd643a6414cb70bbe57cc6">Wireless-X_server.img_width</a> = 720</td></tr>
<tr class="memdesc:afa870e05abcd643a6414cb70bbe57cc6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Width of the camera frame. <br /></td></tr>
<tr class="separator:afa870e05abcd643a6414cb70bbe57cc6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8eebf5dc6b9c928115225a1e3588c3c5"><td class="memItemLeft" align="right" valign="top"><a id="a8eebf5dc6b9c928115225a1e3588c3c5"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a8eebf5dc6b9c928115225a1e3588c3c5">Wireless-X_server.img_height</a> = 480</td></tr>
<tr class="memdesc:a8eebf5dc6b9c928115225a1e3588c3c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Height of the camera frame. <br /></td></tr>
<tr class="separator:a8eebf5dc6b9c928115225a1e3588c3c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a13f596ef10f1688c79547c0bc99ea75f"><td class="memItemLeft" align="right" valign="top"><a id="a13f596ef10f1688c79547c0bc99ea75f"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a13f596ef10f1688c79547c0bc99ea75f">Wireless-X_server.camera</a> = pyfakewebcam.FakeWebcam('/dev/video20', img_width, img_height)</td></tr>
<tr class="memdesc:a13f596ef10f1688c79547c0bc99ea75f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Virtual webcam device. <br /></td></tr>
<tr class="separator:a13f596ef10f1688c79547c0bc99ea75f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a33b4715674007489c6b6756bc8ef4b70"><td class="memItemLeft" align="right" valign="top"><a id="a33b4715674007489c6b6756bc8ef4b70"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a33b4715674007489c6b6756bc8ef4b70">Wireless-X_server.thread_run</a> = True</td></tr>
<tr class="memdesc:a33b4715674007489c6b6756bc8ef4b70"><td class="mdescLeft">&#160;</td><td class="mdescRight">The camera and keyboard-mouse sockets receive user requests until this variable is set to 'True'. <br /></td></tr>
<tr class="separator:a33b4715674007489c6b6756bc8ef4b70"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a58e2d0036cb3910e655408e179feec10"><td class="memItemLeft" align="right" valign="top"><a id="a58e2d0036cb3910e655408e179feec10"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a58e2d0036cb3910e655408e179feec10">Wireless-X_server.keyboard</a> = KeyboardController()</td></tr>
<tr class="memdesc:a58e2d0036cb3910e655408e179feec10"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializing the KeyboardController object. <br /></td></tr>
<tr class="separator:a58e2d0036cb3910e655408e179feec10"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5b66540b63fab3022f0c750bac663345"><td class="memItemLeft" align="right" valign="top"><a id="a5b66540b63fab3022f0c750bac663345"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a5b66540b63fab3022f0c750bac663345">Wireless-X_server.mouse</a> = MouseController()</td></tr>
<tr class="memdesc:a5b66540b63fab3022f0c750bac663345"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializing the MouseController object. <br /></td></tr>
<tr class="separator:a5b66540b63fab3022f0c750bac663345"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3b73746def437cc51ef5946752dd09ad"><td class="memItemLeft" align="right" valign="top"><a id="a3b73746def437cc51ef5946752dd09ad"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a3b73746def437cc51ef5946752dd09ad">Wireless-X_server.mouse_speed</a> = 2</td></tr>
<tr class="memdesc:a3b73746def437cc51ef5946752dd09ad"><td class="mdescLeft">&#160;</td><td class="mdescRight">Speed of mouse movement. <br /></td></tr>
<tr class="separator:a3b73746def437cc51ef5946752dd09ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a84a42e06c60f25a66338c51f4fcf5f99"><td class="memItemLeft" align="right" valign="top"><a id="a84a42e06c60f25a66338c51f4fcf5f99"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a84a42e06c60f25a66338c51f4fcf5f99">Wireless-X_server.screenshot_count</a> = 0</td></tr>
<tr class="memdesc:a84a42e06c60f25a66338c51f4fcf5f99"><td class="mdescLeft">&#160;</td><td class="mdescRight">Screenshot counter to keep track of screenshots. <br /></td></tr>
<tr class="separator:a84a42e06c60f25a66338c51f4fcf5f99"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2bfd6439764b53b8df612bbc0335a07c"><td class="memItemLeft" align="right" valign="top"><a id="a2bfd6439764b53b8df612bbc0335a07c"></a>
dictionary&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Wireless-X__server_8py.html#a2bfd6439764b53b8df612bbc0335a07c">Wireless-X_server.special_key_android_dictionary</a> = {&quot;F1&quot;: &quot;F1&quot;, &quot;F2&quot;:&quot;F2&quot;, &quot;F3&quot;:&quot;F3&quot;, &quot;F4&quot;:&quot;F4&quot;, &quot;F5&quot;:&quot;F5&quot;, &quot;F6&quot;:&quot;F6&quot;, &quot;F7&quot;:&quot;F7&quot;, &quot;F8&quot;:&quot;F8&quot;, &quot;F9&quot;:&quot;F9&quot;, &quot;F10&quot;:&quot;F10&quot;, &quot;F11&quot;:&quot;F11&quot;, &quot;F12&quot;:&quot;F12&quot;, &quot;Alt&quot;:&quot;ALT&quot;, &quot;Backspace&quot;:&quot;BACKSPACE&quot;, &quot;Caps\nLock&quot;:&quot;CAPS_LOCK&quot;, &quot;Ctrl&quot;:&quot;CONTROL&quot;, &quot;Delete&quot;:&quot;DELETE&quot;, &quot;↓&quot;:&quot;DOWN_ARROW&quot;, &quot;End&quot;:&quot;END&quot;, &quot;Esc&quot;:&quot;ESCAPE&quot;, &quot;Home&quot;:&quot;HOME&quot;, &quot;←&quot;:&quot;LEFT_ARROW&quot;, &quot;META&quot;:&quot;META&quot;, &quot;Page Down&quot;:&quot;PAGE_DOWN&quot;, &quot;Page Up&quot;:&quot;PAGE_UP&quot;, &quot;Enter&quot;:&quot;RETURN&quot;, &quot;→&quot;:&quot;RIGHT_ARROW&quot;, &quot;Shift&quot;:&quot;SHIFT&quot;, &quot;Space&quot;:&quot;SPACE&quot;, &quot;↑&quot;:&quot;UP_ARROW&quot;, &quot;Tab&quot;:&quot;Tab&quot;}</td></tr>
<tr class="memdesc:a2bfd6439764b53b8df612bbc0335a07c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maps the keys in keyboard layout to the actual keyboard keys. <br /></td></tr>
<tr class="separator:a2bfd6439764b53b8df612bbc0335a07c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>This includes the code for the server-side of Wireless-X. </p>
<p>The server running on laptop or PC is responsible for receiving the actions performed by user on the Wireless-X android app as well as receiving the camera frames of the user's smartphone (if the user has turned) on the camera). Such actions are transmitted to the server in encoded form, the server decodes the received message and instructs the laptop or PC to perform the action described in that message. </p>
</div><h2 class="groupheader">Function Documentation</h2>
<a id="a89ff6223b623131684a93295f32bc976"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a89ff6223b623131684a93295f32bc976">&#9670;&nbsp;</a></span>bind_sockets()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">def Wireless-X_server.bind_sockets </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>This function establishes two sockets for receiving camera frames as well as mouse and keyboard actions. </p>
<pre class="fragment">This function creates a camera socket which is responsible for receiving the camera frames, and it also
creates another socket which is responsible for receiving the keyboard and mouse frames.</pre> 
</div>
</div>
<a id="aa577d8e17a9ed9e9765dfad47310f8e4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa577d8e17a9ed9e9765dfad47310f8e4">&#9670;&nbsp;</a></span>camera_stream_connections()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">def Wireless-X_server.camera_stream_connections </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>This function is responsible for handling the camera frames. </p>
<pre class="fragment">This function uses the 'OpenCV' library to decode and resize the camera frame. Then, this frame is scheduled on 
the virtual webcam device created using 'pyfakewebcam' library.</pre> 
</div>
</div>
<a id="a79901b301ca92aaf0cf102d9eb534a91"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a79901b301ca92aaf0cf102d9eb534a91">&#9670;&nbsp;</a></span>listening_connections()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">def Wireless-X_server.listening_connections </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>This function is responsible for listening to connections. </p>
<pre class="fragment">This function creates two threads corresponding to the two sockets, one for handling mouse and keyboard events 
and the other for handling camera frames received from the user's smartphone.</pre> 
</div>
</div>
<a id="a6db0464af01126b82f9ff27839b4d236"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6db0464af01126b82f9ff27839b4d236">&#9670;&nbsp;</a></span>mouse_keyboard_connections()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">def Wireless-X_server.mouse_keyboard_connections </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>This function decodes the received mouse and keyboard actions and acts accordingly. </p>
<pre class="fragment">This function checks if the message received corresponds to a mouse action (left-click, scroll, etc.) or a keyboard action 
(such as keypress). It then instructs the laptop to perform these actions, using the 'autopy' and 'pynput' libraries. Some special 
characters in keyboard are not supported by 'autopy' library, so the actions corresponding to these special characters are performed
by the 'pynput' library, other key actions are handled by the 'autopy' library. In case of mouse, the 'autopy' library was not that 
efficient, so we used the 'pynput' library.</pre> 
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.0
</small></address>
</body>
</html>