public static int Main(String[] args) { Console.Write("Sky seed [default random]: "); var seedStr = Console.ReadLine(); if (seedStr.Length == 0) { seedStr = "0"; } int seed; if (!int.TryParse(seedStr, out seed)) { seed = seedStr.GetHashCode(); } if (seed == 0) { seed = new Random().Next(1, int.MaxValue); } float radius = 0f; float density = 0f; do { Console.Write("World radius <0.5 - 1024> [default 8]: "); var str = Console.ReadLine(); if (str.Length == 0) { radius = 8f; } else { float.TryParse(str, out radius); } } while (radius < 0.5f || radius > 1024f); do { Console.Write("World density <1 - 65536> [default 1024]: "); var str = Console.ReadLine(); if (str.Length == 0) { density = 1024f; } else { float.TryParse(str, out density); } } while (density < 1f || density > 65536f); _skySeed = seed; _players = new Dictionary <NetConnection, PlayerInfo>(); var timer = new Stopwatch(); timer.Start(); NetWrapper.RegisterIdentifier("PlayerInfo"); NetWrapper.RegisterMessageHandler("WorldInfo", msg => { var player = GetPlayer(msg.SenderConnection); NetWrapper.SendMessage("WorldInfo", reply => { reply.Write(_skySeed); reply.Write(radius); reply.Write(density); reply.Write(timer.Elapsed.TotalSeconds); reply.Write(player.ID); }, msg.SenderConnection, NetDeliveryMethod.ReliableOrdered, 0); }); NetWrapper.RegisterMessageHandler("PlayerPos", msg => { var player = GetPlayer(msg.SenderConnection); player.Position = new Vector3(msg.ReadFloat(), msg.ReadFloat(), msg.ReadFloat()); var others = NetWrapper.Connections; others.Remove(msg.SenderConnection); NetWrapper.SendMessage("PlayerPos", reply => { reply.Write(player.ID); reply.Write(player.Position.X); reply.Write(player.Position.Y); reply.Write(player.Position.Z); }, others, NetDeliveryMethod.ReliableSequenced, 1); }); NetWrapper.StartListening(14242, 128); while (NetWrapper.Status != NetPeerStatus.NotRunning) { if (!NetWrapper.CheckForMessages()) { Thread.Sleep(16); } var connected = NetWrapper.Connections; var disconnected = _players.Values.Where(x => !connected.Contains(x.Connection)).ToArray(); if (disconnected.Length > 0) { foreach (var player in disconnected) { _players.Remove(player.Connection); } UpdatePlayers(connected); } } return(0); }