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>
 |