1
0
mirror of https://github.com/lidgren/lidgren-network-gen3.git synced 2026-05-19 00:26:30 +09:00

SendToAll added to NetServer

This commit is contained in:
lidgren
2011-02-12 14:08:31 +00:00
parent 94b8e699b8
commit 0238b5c5e7
3 changed files with 80 additions and 34 deletions

View File

@@ -43,11 +43,21 @@ namespace Lidgren.Network
} }
/// <summary> /// <summary>
/// Get random bits /// Create 16 bytes of random salt
/// </summary> /// </summary>
public static byte[] CreateRandomKey(int bits) public static byte[] CreateRandomSalt()
{ {
byte[] retval = new byte[bits / 8]; byte[] retval = new byte[16];
NetRandom.Instance.NextBytes(retval);
return retval;
}
/// <summary>
/// Create 32 bytes of random ephemeral value
/// </summary>
public static byte[] CreateRandomEphemeral()
{
byte[] retval = new byte[32];
NetRandom.Instance.NextBytes(retval); NetRandom.Instance.NextBytes(retval);
return retval; return retval;
} }

View File

@@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Generic;
namespace Lidgren.Network namespace Lidgren.Network
{ {
@@ -13,6 +14,38 @@ namespace Lidgren.Network
config.AcceptIncomingConnections = true; config.AcceptIncomingConnections = true;
} }
/// <summary>
/// Send a message to all connections
/// </summary>
/// <param name="msg">The message to send</param>
/// <param name="method">How to deliver the message</param>
public void SendToAll(NetOutgoingMessage msg, NetDeliveryMethod method)
{
SendMessage(msg, this.Connections, method, 0);
}
/// <summary>
/// Send a message to all connections except one
/// </summary>
/// <param name="msg">The message to send</param>
/// <param name="method">How to deliver the message</param>
public void SendToAll(NetOutgoingMessage msg, NetConnection except, NetDeliveryMethod method)
{
var all = this.Connections;
if (all.Count <= 0)
return;
List<NetConnection> recipients = new List<NetConnection>(all.Count - 1);
foreach (var conn in all)
if (conn != except)
recipients.Add(conn);
if (recipients.Count > 0)
SendMessage(msg, recipients, method, 0);
}
/// <summary> /// <summary>
/// Returns a string that represents this object /// Returns a string that represents this object
/// </summary> /// </summary>

View File

@@ -56,17 +56,19 @@ namespace UnitTests
if (im.ReadString() != "kokos") if (im.ReadString() != "kokos")
throw new NetException("fail"); throw new NetException("fail");
byte[] salt = NetSRP.CreateRandomKey(16); for (int i = 0; i < 100; i++)
{
byte[] salt = NetSRP.CreateRandomSalt();
byte[] x = NetSRP.ComputePrivateKey("user", "password", salt); byte[] x = NetSRP.ComputePrivateKey("user", "password", salt);
byte[] v = NetSRP.ComputeServerVerifier(x); byte[] v = NetSRP.ComputeServerVerifier(x);
//Console.WriteLine("v = " + NetUtility.ToHexString(v)); //Console.WriteLine("v = " + NetUtility.ToHexString(v));
byte[] a = NetSRP.CreateRandomKey(32); // NetUtility.ToByteArray("393ed364924a71ba7258633cc4854d655ca4ec4e8ba833eceaad2511e80db2b5"); byte[] a = NetSRP.CreateRandomEphemeral(); // NetUtility.ToByteArray("393ed364924a71ba7258633cc4854d655ca4ec4e8ba833eceaad2511e80db2b5");
byte[] A = NetSRP.ComputeClientEphemeral(a); byte[] A = NetSRP.ComputeClientEphemeral(a);
//Console.WriteLine("A = " + NetUtility.ToHexString(A)); //Console.WriteLine("A = " + NetUtility.ToHexString(A));
byte[] b = NetSRP.CreateRandomKey(32); // NetUtility.ToByteArray("cc4d87a90db91067d52e2778b802ca6f7d362490c4be294b21b4a57c71cf55a9"); byte[] b = NetSRP.CreateRandomEphemeral(); // NetUtility.ToByteArray("cc4d87a90db91067d52e2778b802ca6f7d362490c4be294b21b4a57c71cf55a9");
byte[] B = NetSRP.ComputeServerEphemeral(b, v); byte[] B = NetSRP.ComputeServerEphemeral(b, v);
//Console.WriteLine("B = " + NetUtility.ToHexString(B)); //Console.WriteLine("B = " + NetUtility.ToHexString(B));
@@ -89,6 +91,7 @@ namespace UnitTests
} }
var test = NetSRP.CreateEncryption(Ss); var test = NetSRP.CreateEncryption(Ss);
}
Console.WriteLine("Message encryption OK"); Console.WriteLine("Message encryption OK");
} }