move to github
This commit is contained in:
113
Lidgren.Network/Documentation/Discovery.html
Normal file
113
Lidgren.Network/Documentation/Discovery.html
Normal file
@@ -0,0 +1,113 @@
|
||||
<!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>
|
Reference in New Issue
Block a user