using System; using System.IO; using System.Xml.Serialization; using System.Linq; using System.Collections.Generic; using Lidgren.Network; namespace CoopServer { class Util { public static NetConnection GetConnectionByUsername(string username) { long? userID = GetIdByUsername(username); if (userID == null || !Server.MainNetServer.Connections.Any(x => x.RemoteUniqueIdentifier == userID)) { return null; } return Server.MainNetServer.Connections.First(x => x.RemoteUniqueIdentifier == userID); } public static long? GetIdByUsername(string username) { return Server.Players.Any(x => x.Value.Username == username) ? Server.Players.First(x => x.Value.Username == username).Key : null; } // Return a list of all connections but not the local connection public static List FilterAllLocal(NetConnection local) { return new(Server.MainNetServer.Connections.Where(e => e != local)); } public static List FilterAllLocal(long local) { return new(Server.MainNetServer.Connections.Where(e => e.RemoteUniqueIdentifier != local)); } // Return a list of players within range of ... public static List GetAllInRange(LVector3 position, float range) { return new(Server.MainNetServer.Connections.FindAll(e => Server.Players[e.RemoteUniqueIdentifier].IsInRangeOf(position, range))); } // Return a list of players within range of ... but not the local one public static List GetAllInRange(LVector3 position, float range, NetConnection local) { return new(Server.MainNetServer.Connections.Where(e => e != local && Server.Players[e.RemoteUniqueIdentifier].IsInRangeOf(position, range))); } public static T Read(string file) where T : new() { XmlSerializer ser = new(typeof(T)); string path = AppContext.BaseDirectory + file; T data; if (File.Exists(path)) { using (FileStream stream = File.OpenRead(path)) { data = (T)ser.Deserialize(stream); } using (FileStream stream = new(path, File.Exists(path) ? FileMode.Truncate : FileMode.Create, FileAccess.ReadWrite)) { ser.Serialize(stream, data); } } else { using FileStream stream = File.OpenWrite(path); ser.Serialize(stream, data = new T()); } return data; } } }