114 lines
4.6 KiB
HTML
114 lines
4.6 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
|
<html>
|
|
<head>
|
|
<style type="text/css">
|
|
body
|
|
{
|
|
font-family: Verdana, Geneva, Arial, sans-serif;
|
|
font-size: small;
|
|
margin-left: 20px;
|
|
background-color: #dddddd;
|
|
}
|
|
td
|
|
{
|
|
font-family: Verdana, Geneva, Arial, sans-serif;
|
|
font-size: small;
|
|
}
|
|
.page
|
|
{
|
|
width: 700px;
|
|
}
|
|
.cf
|
|
{
|
|
font-family: Courier New;
|
|
font-size: 10pt;
|
|
color: black;
|
|
background: white;
|
|
padding: 16px;
|
|
border: 1px solid black;
|
|
}
|
|
.cl
|
|
{
|
|
margin: 0px;
|
|
}
|
|
.cb1
|
|
{
|
|
color: green;
|
|
}
|
|
.cb2
|
|
{
|
|
color: #2b91af;
|
|
}
|
|
.cb3
|
|
{
|
|
color: blue;
|
|
}
|
|
.cb4
|
|
{
|
|
color: #a31515;
|
|
}
|
|
</style>
|
|
<title>Peer/server discovery</title>
|
|
</head>
|
|
<body>
|
|
<table>
|
|
<tr>
|
|
<td class="page">
|
|
<h1>Peer/server discovery</h1>
|
|
<p>
|
|
Peer discovery is the process of clients detecting what servers are available. Discovery requests can be made in two ways;
|
|
locally as a broadcast, which will send a signal to all peers on your subnet. Secondly you can contact an ip address directly
|
|
and query it if a server is running.
|
|
</p>
|
|
<p>Responding to discovery requests are done in the same way regardless of how the request is made.</p>
|
|
|
|
<p>Here's how to do on the client side; ie. the side which makes a request:</p>
|
|
<div class="cf">
|
|
<pre class="cl"><span class="cb1">// Enable DiscoveryResponse messages</span></pre>
|
|
<pre class="cl">config.EnableMessageType(<span class="cb2">NetIncomingMessageType</span>.DiscoveryResponse);</pre>
|
|
<pre class="cl"> </pre>
|
|
<pre class="cl"><span class="cb1">// Emit a discovery signal</span></pre>
|
|
<pre class="cl">Client.DiscoverLocalPeers(14242);</pre>
|
|
</div>
|
|
|
|
<p>This will send a discovery signal to your subnet; Here's how to receive the signal on the server side, and send a response back to the client:</p>
|
|
|
|
<div class="cf">
|
|
<pre class="cl"><span class="cb1">// Enable DiscoveryRequest messages</span></pre>
|
|
<pre class="cl">config.EnableMessageType(<span class="cb2">NetIncomingMessageType</span>.DiscoveryRequest);</pre>
|
|
<pre class="cl"> </pre>
|
|
<pre class="cl"><span class="cb1">// Standard message reading loop</span></pre>
|
|
<pre class="cl"><span class="cb3">while</span> ((inc = Server.ReadMessage()) != <span class="cb1">null</span>)</pre>
|
|
<pre class="cl">{</pre>
|
|
<pre class="cl"> <span class="cb3">switch</span> (inc.MessageType)</pre>
|
|
<pre class="cl"> {</pre>
|
|
<pre class="cl"> <span class="cb3">case</span> <span class="cb2">NetIncomingMessageType</span>.DiscoveryRequest:</pre>
|
|
<pre class="cl"> </pre>
|
|
<pre class="cl"> <span class="cb1">// Create a response and write some example data to it</span></pre>
|
|
<pre class="cl"> <span class="cb2">NetOutgoingMessage</span> response = Server.CreateMessage();</pre>
|
|
<pre class="cl"> response.Write(<span class="cb4">"My server name"</span>);</pre>
|
|
<pre class="cl"> </pre>
|
|
<pre class="cl"> <span class="cb1">// Send the response to the sender of the request</span></pre>
|
|
<pre class="cl"> Server.SendDiscoveryResponse(response, inc.SenderEndpoint);</pre>
|
|
<pre class="cl"> <span class="cb3">break</span>;</pre>
|
|
</div>
|
|
|
|
<p>When the response then reaches the client, you can read the data you wrote on the server:</p>
|
|
|
|
<div class="cf">
|
|
<pre class="cl"><span class="cb1">// Standard message reading loop</span></pre>
|
|
<pre class="cl"><span class="cb3">while</span> ((inc = Client.ReadMessage()) != <span class="cb1">null</span>)</pre>
|
|
<pre class="cl">{</pre>
|
|
<pre class="cl"> <span class="cb3">switch</span> (inc.MessageType)</pre>
|
|
<pre class="cl"> {</pre>
|
|
<pre class="cl"> <span class="cb3">case</span> <span class="cb2">NetIncomingMessageType</span>.DiscoveryResponse:</pre>
|
|
<pre class="cl"> </pre>
|
|
<pre class="cl"> <span class="cb2">Console</span>.WriteLine(<span class="cb4">"Found server at "</span> + inc.SenderEndpoint + <span class="cb4">" name: "</span> + inc.ReadString());</pre>
|
|
<pre class="cl"> <span class="cb3">break</span>;</pre>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</body>
|
|
</html>
|