diff --git a/src/client/Master/Client/MasterGetServersMessage.cs b/src/client/Master/Client/MasterGetServersMessage.cs index 5c3c0a3..086d558 100644 --- a/src/client/Master/Client/MasterGetServersMessage.cs +++ b/src/client/Master/Client/MasterGetServersMessage.cs @@ -1,12 +1,12 @@ using System.Collections.Generic; using System.Linq; using log4net; -using NPSharp.Master.Messages.Data; +using NPSharp.Master.Data; namespace NPSharp.Master.Messages.Client { /// - /// Represents a request message for the master server for a standard dedicated server list. + /// Represents a request message for the master server for a standard dedicated server list. /// [MasterClientMessage("getservers")] public class MasterGetServersMessage : MasterClientMessage @@ -16,12 +16,28 @@ namespace NPSharp.Master.Messages.Client static MasterGetServersMessage() { Log = LogManager.GetLogger(typeof (MasterGetServersMessage)); - } + } + + /// + /// The game for which servers should be fetched + /// + public string GameName { get; set; } + + /// + /// The protocol version of the dedicated servers to search for + /// + public uint ProtocolVersion { get; set; } + + /// + /// Extra keywords to take care of when generating the server list + /// + public List Keywords { get; set; } protected override string Serialize() { // I wonder if an extra useless space char at the end is okay in this case - return string.Format("{0} {1} {2} {3}", Name, GameName, ProtocolVersion, string.Join(" ", Keywords.Select(k => k.ToString()))); + return string.Format("{0} {1} {2} {3}", Name, GameName, ProtocolVersion, + string.Join(" ", Keywords.Select(k => k.ToString()))); } protected override void Deserialize(string[] arguments) @@ -44,20 +60,5 @@ namespace NPSharp.Master.Messages.Client } } } - - /// - /// The game for which servers should be fetched - /// - public string GameName { get; set; } - - /// - /// The protocol version of the dedicated servers to search for - /// - public uint ProtocolVersion { get; set; } - - /// - /// Extra keywords to take care of when generating the server list - /// - public List Keywords { get; set; } } } \ No newline at end of file diff --git a/src/client/Master/Client/MasterGetServersKeywords.cs b/src/client/Master/Data/MasterGetServersKeywords.cs similarity index 53% rename from src/client/Master/Client/MasterGetServersKeywords.cs rename to src/client/Master/Data/MasterGetServersKeywords.cs index 54131e0..0065f3e 100644 --- a/src/client/Master/Client/MasterGetServersKeywords.cs +++ b/src/client/Master/Data/MasterGetServersKeywords.cs @@ -1,7 +1,7 @@ -namespace NPSharp.Master.Messages.Data +namespace NPSharp.Master.Data { /// - /// Represents keywords for a master server standard serverlist request. + /// Represents keywords for a master server standard serverlist request. /// public enum MasterGetServersKeywords { diff --git a/src/client/Master/DedicatedServerEntry.cs b/src/client/Master/DedicatedServerEntry.cs index 2a328bd..e97a9c9 100644 --- a/src/client/Master/DedicatedServerEntry.cs +++ b/src/client/Master/DedicatedServerEntry.cs @@ -25,7 +25,8 @@ namespace NPSharp.Master var buffer = new List(); if (standardFormat) - buffer.AddRange(BitConverter.GetBytes(IPAddress.HostToNetworkOrder(IP.GetHashCode()))); // TODO: GetHashCode == IP address as number??? + buffer.AddRange(BitConverter.GetBytes(IPAddress.HostToNetworkOrder(IP.GetHashCode()))); + // TODO: GetHashCode == IP address as number??? else { // TODO: Implement extended serialization format for IP addresses! diff --git a/src/client/Master/MasterClientMessage.cs b/src/client/Master/MasterClientMessage.cs index bc9e936..caf2247 100644 --- a/src/client/Master/MasterClientMessage.cs +++ b/src/client/Master/MasterClientMessage.cs @@ -71,7 +71,7 @@ namespace NPSharp.Master.Messages { var header = buffer.Take(4).ToArray(); var command = Encoding.ASCII.GetString(buffer, 4, buffer.Length - 4).Trim(); - var commandSplit = command.Split(new[] { '\t', '\r', '\n', '\0', ' ' }, + var commandSplit = command.Split(new[] {'\t', '\r', '\n', '\0', ' '}, StringSplitOptions.RemoveEmptyEntries); var commandName = commandSplit[0]; @@ -79,11 +79,11 @@ namespace NPSharp.Master.Messages // Search for a message class which fits to the commandName var message = - (MasterClientMessage)Activator.CreateInstance(Assembly.GetExecutingAssembly() + (MasterClientMessage) Activator.CreateInstance(Assembly.GetExecutingAssembly() .GetTypes() .Single( t => - t.IsSubclassOf(typeof(MasterClientMessage)) && + t.IsSubclassOf(typeof (MasterClientMessage)) && t.GetCustomAttribute() .Name.Equals(commandName, StringComparison.OrdinalIgnoreCase))); diff --git a/src/client/Master/MasterClientMessageAttribute.cs b/src/client/Master/MasterClientMessageAttribute.cs index 921cd74..680d7cc 100644 --- a/src/client/Master/MasterClientMessageAttribute.cs +++ b/src/client/Master/MasterClientMessageAttribute.cs @@ -11,4 +11,4 @@ namespace NPSharp.Master.Messages internal string Name { get; private set; } } -} +} \ No newline at end of file diff --git a/src/client/NP/NPClient.cs b/src/client/NP/NPClient.cs index 933822f..960f5cf 100644 --- a/src/client/NP/NPClient.cs +++ b/src/client/NP/NPClient.cs @@ -194,7 +194,7 @@ namespace NPSharp.NP /// Path where to save the file public async void DownloadUserFileTo(string filename, string targetpath) { - byte[] contents = await GetUserFile(filename); + var contents = await GetUserFile(filename); File.WriteAllBytes(targetpath, contents); } @@ -231,7 +231,7 @@ namespace NPSharp.NP /// Path where to save the file public async void DownloadPublisherFileTo(string filename, string targetpath) { - byte[] contents = await GetPublisherFile(filename); + var contents = await GetPublisherFile(filename); File.WriteAllBytes(targetpath, contents); } diff --git a/src/client/NPSharp.Client.csproj b/src/client/NPSharp.Client.csproj index 21d62fd..2ddb00d 100644 --- a/src/client/NPSharp.Client.csproj +++ b/src/client/NPSharp.Client.csproj @@ -53,7 +53,7 @@ - + diff --git a/src/client/Properties/AssemblyInfo.cs b/src/client/Properties/AssemblyInfo.cs index 26598b8..e954a29 100644 --- a/src/client/Properties/AssemblyInfo.cs +++ b/src/client/Properties/AssemblyInfo.cs @@ -5,6 +5,7 @@ using System.Runtime.InteropServices; // Allgemeine Informationen über eine Assembly werden über die folgenden // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, // die mit einer Assembly verknüpft sind. + [assembly: AssemblyTitle("NPSharp client library")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] @@ -17,9 +18,11 @@ using System.Runtime.InteropServices; // Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar // für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von // COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest. + [assembly: ComVisible(false)] // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird + [assembly: Guid("eb49c20b-b649-42fa-bff4-f62aba36e0b0")] // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: @@ -32,8 +35,10 @@ using System.Runtime.InteropServices; // Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern // übernehmen, indem Sie "*" eingeben: // [assembly: AssemblyVersion("1.0.*")] + [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyFileVersion("1.0")] // Make internals visible to the server counterpart of this library + [assembly: InternalsVisibleTo("npsharp_server")] \ No newline at end of file diff --git a/src/client/RPC/Messages/Data/Ticket.cs b/src/client/RPC/Messages/Data/Ticket.cs index 6956b48..0f79f3a 100644 --- a/src/client/RPC/Messages/Data/Ticket.cs +++ b/src/client/RPC/Messages/Data/Ticket.cs @@ -31,9 +31,17 @@ namespace NPSharp.RPC.Messages.Data if (time.HasValue) Time = time.Value; else - Time = (uint)DateTime.Now.ToUniversalTime().ToBinary(); + Time = (uint) DateTime.Now.ToUniversalTime().ToBinary(); } + public uint Version { get; private set; } + + public ulong ClientID { get; private set; } + + public ulong ServerID { get; private set; } + + public uint Time { get; private set; } + public byte[] Serialize() { using (var ms = new MemoryStream(sizeof (uint) + (sizeof (ulong)*2) + sizeof (uint))) @@ -49,13 +57,5 @@ namespace NPSharp.RPC.Messages.Data } } } - - public uint Version { get; private set; } - - public ulong ClientID { get; private set; } - - public ulong ServerID { get; private set; } - - public uint Time { get; private set; } } } \ No newline at end of file diff --git a/src/client/packages.config b/src/client/packages.config index 04f4b7d..4210e82 100644 --- a/src/client/packages.config +++ b/src/client/packages.config @@ -1,4 +1,5 @@  + diff --git a/src/npfile/NP2HTTPPublisherFileHandler.cs b/src/npfile/NP2HTTPPublisherFileHandler.cs index ecadea5..4522d6f 100644 --- a/src/npfile/NP2HTTPPublisherFileHandler.cs +++ b/src/npfile/NP2HTTPPublisherFileHandler.cs @@ -24,7 +24,7 @@ namespace NPSharp.CommandLine.File public Task Handle(IHttpContext context, Func next) { - string uri = context.Request.QueryString.Any() + var uri = context.Request.QueryString.Any() ? null : string.Join("/", context.Request.Uri.OriginalString.Split('/').Skip(2)); if (uri == null) @@ -38,7 +38,7 @@ namespace NPSharp.CommandLine.File } _log.InfoFormat("Requesting publisher file {0}", uri); - Task task = _np.GetPublisherFile(uri); + var task = _np.GetPublisherFile(uri); try { task.Wait(); diff --git a/src/npfile/NP2HTTPUserFileHandler.cs b/src/npfile/NP2HTTPUserFileHandler.cs index 6f355d2..8953b37 100644 --- a/src/npfile/NP2HTTPUserFileHandler.cs +++ b/src/npfile/NP2HTTPUserFileHandler.cs @@ -24,7 +24,7 @@ namespace NPSharp.CommandLine.File public Task Handle(IHttpContext context, Func next) { - string uri = context.Request.QueryString.Any() + var uri = context.Request.QueryString.Any() ? null : string.Join("/", context.Request.Uri.OriginalString.Split('/').Skip(2)); if (uri == null) @@ -38,7 +38,7 @@ namespace NPSharp.CommandLine.File } _log.InfoFormat("Requesting user file {0}", uri); - Task task = _np.GetUserFile(uri); + var task = _np.GetUserFile(uri); try { task.Wait(); diff --git a/src/npfile/Program.cs b/src/npfile/Program.cs index 9de71d1..7f068be 100644 --- a/src/npfile/Program.cs +++ b/src/npfile/Program.cs @@ -14,7 +14,6 @@ using uhttpsharp.Handlers; using uhttpsharp.Headers; using uhttpsharp.Listeners; using uhttpsharp.RequestProviders; -using HttpResponse = uhttpsharp.HttpResponse; namespace NPSharp.CommandLine.File { @@ -96,9 +95,9 @@ namespace NPSharp.CommandLine.File Console.ReadKey(); } } + private static void SetupLog4Net() { - if (Environment.OSVersion.Platform == PlatformID.Unix || Environment.OSVersion.Platform == PlatformID.MacOSX) { var appender = new ConsoleAppender @@ -110,7 +109,8 @@ namespace NPSharp.CommandLine.File #endif Layout = new PatternLayout("<%d{HH:mm:ss}> [%logger:%thread] %level: %message%newline"), }; - BasicConfigurator.Configure(new IAppender[] { appender, new DebugAppender { Layout = appender.Layout, Threshold = Level.All } }); + BasicConfigurator.Configure(new IAppender[] + {appender, new DebugAppender {Layout = appender.Layout, Threshold = Level.All}}); } else { @@ -150,10 +150,9 @@ namespace NPSharp.CommandLine.File BackColor = ColoredConsoleAppender.Colors.Red }); appender.ActivateOptions(); - BasicConfigurator.Configure(new IAppender[] { appender, new DebugAppender { Layout = appender.Layout, Threshold = Level.All } }); + BasicConfigurator.Configure(new IAppender[] + {appender, new DebugAppender {Layout = appender.Layout, Threshold = Level.All}}); } - } - } } \ No newline at end of file diff --git a/src/npfile/packages.config b/src/npfile/packages.config index 5012bcf..41edbdf 100644 --- a/src/npfile/packages.config +++ b/src/npfile/packages.config @@ -1,4 +1,5 @@  + diff --git a/src/server/Master/MasterServer.cs b/src/server/Master/MasterServer.cs index d3746e0..d8eb93c 100644 --- a/src/server/Master/MasterServer.cs +++ b/src/server/Master/MasterServer.cs @@ -3,29 +3,27 @@ using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; -using System.Threading; using System.Threading.Tasks; using log4net; using NPSharp.Master.Messages; using NPSharp.Master.Messages.Client; -using NPSharp.NP; namespace NPSharp.Master { public class MasterServer { // TODO: !! Avoid socket fail if stopping then restarting - private readonly Socket _socket4 = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); - private readonly Socket _socket6 = new Socket(AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp); - - private readonly ILog _log; - private readonly ushort _port; private readonly List>> _callbacks = new List>>(); + private readonly ILog _log; + private readonly ushort _port; + // TODO: Use the same kind of interfaces as in NP server to handle server addition and deletion private readonly List _registeredServers = new List(); + private readonly Socket _socket4 = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); + private readonly Socket _socket6 = new Socket(AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp); public MasterServer(ushort port = 20810) { @@ -33,18 +31,15 @@ namespace NPSharp.Master _log = LogManager.GetLogger("MasterServer"); // Internal callbacks - AddCallback(messages => - { - - }); + AddCallback(messages => { }); } internal void AddCallback(Action callback) where T : MasterClientMessage { _callbacks.Add( new KeyValuePair>( - typeof(T), - msg => callback.Invoke((T)msg))); + typeof (T), + msg => callback.Invoke((T) msg))); } /// @@ -86,7 +81,7 @@ namespace NPSharp.Master while (true) { var buffer = new byte[1400]; - var clientEndPoint = (EndPoint)new IPEndPoint(IPAddress.IPv6Any, 0); + var clientEndPoint = (EndPoint) new IPEndPoint(IPAddress.IPv6Any, 0); var recvLength = _socket6.ReceiveFrom(buffer, ref clientEndPoint); if (recvLength <= buffer.Length) mergedBuffer.AddRange(buffer); @@ -118,6 +113,5 @@ namespace NPSharp.Master _log.DebugFormat("Not handling client {0} anymore", ep); } - } -} +} \ No newline at end of file diff --git a/src/server/Master/Messages/MasterServerMessage.cs b/src/server/Master/Messages/MasterServerMessage.cs index 02ee2da..46483a6 100644 --- a/src/server/Master/Messages/MasterServerMessage.cs +++ b/src/server/Master/Messages/MasterServerMessage.cs @@ -34,10 +34,10 @@ namespace NPSharp.Master.Messages internal static MasterServerMessage Deserialize(byte[] buffer) { - var header = buffer.Take(4).ToArray(); var command = Encoding.ASCII.GetString(buffer, 4, buffer.Length - 4).Trim(); - var commandSplit = command.Split(new[] { '\t', '\r', '\n', '\0', ' ' }, // TODO: Response consists of multipart messages separated by \ instead of ?? Try to be stay as close to client messages as possible. + var commandSplit = command.Split(new[] {'\t', '\r', '\n', '\0', ' '}, + // TODO: Response consists of multipart messages separated by \ instead of ?? Try to be stay as close to client messages as possible. StringSplitOptions.RemoveEmptyEntries); var commandName = commandSplit[0]; @@ -45,11 +45,11 @@ namespace NPSharp.Master.Messages // Search for a message class which fits to the commandName var message = - (MasterServerMessage)Activator.CreateInstance(Assembly.GetExecutingAssembly() + (MasterServerMessage) Activator.CreateInstance(Assembly.GetExecutingAssembly() .GetTypes() .Single( t => - t.IsSubclassOf(typeof(MasterServerMessage)) && + t.IsSubclassOf(typeof (MasterServerMessage)) && t.GetCustomAttribute() .Name.Equals(commandName, StringComparison.OrdinalIgnoreCase))); diff --git a/src/server/Master/Messages/MasterServerMessageAttribute.cs b/src/server/Master/Messages/MasterServerMessageAttribute.cs index 0ee0ad4..fbe6d77 100644 --- a/src/server/Master/Messages/MasterServerMessageAttribute.cs +++ b/src/server/Master/Messages/MasterServerMessageAttribute.cs @@ -11,4 +11,4 @@ namespace NPSharp.Master.Messages public string Name { get; private set; } } -} +} \ No newline at end of file diff --git a/src/server/NP/NPServer.cs b/src/server/NP/NPServer.cs index 938b94d..820f429 100644 --- a/src/server/NP/NPServer.cs +++ b/src/server/NP/NPServer.cs @@ -35,9 +35,9 @@ namespace NPSharp.NP { _log = LogManager.GetLogger("NPServer"); _clients = new List(); - + #if MONO_INCOMPATIBLE - // Mono can't compile this since the constructor is proprietary to Windows' .NET library + // Mono can't compile this since the constructor is proprietary to Windows' .NET library _socket = new Socket(SocketType.Stream, ProtocolType.IP); // Mono can't compile this either since the IPv6Only socket option is completely missing. @@ -105,7 +105,7 @@ namespace NPSharp.NP _log.Error("Socket permission request failed, can't start server."); throw new SocketException(10013 /* Permission denied */); } - + #if MONO_INCOMPATIBLE _socket.Bind(new IPEndPoint(IPAddress.IPv6Any, _port)); _socket.Listen(100); @@ -153,7 +153,7 @@ namespace NPSharp.NP } _log.Debug("Listener loop shut down"); }); - + #if !MONO_INCOMPATIBLE Task.Factory.StartNew(() => { @@ -168,7 +168,7 @@ namespace NPSharp.NP _log.Debug("Async accept (IPv6) client start"); allDone.Set(); - var serverSocket = (Socket)ar.AsyncState; + var serverSocket = (Socket) ar.AsyncState; var clientSocket = serverSocket.EndAccept(ar); var npsc = new NPServerClient(this, new RPCServerStream(clientSocket)); diff --git a/src/server/NP/NPServerClient.cs b/src/server/NP/NPServerClient.cs index 72c1df5..e569d8a 100644 --- a/src/server/NP/NPServerClient.cs +++ b/src/server/NP/NPServerClient.cs @@ -56,4 +56,4 @@ namespace NPSharp.NP _presence[key] = value; } } -} +} \ No newline at end of file diff --git a/src/server/Properties/AssemblyInfo.cs b/src/server/Properties/AssemblyInfo.cs index f4c8dac..2291f1e 100644 --- a/src/server/Properties/AssemblyInfo.cs +++ b/src/server/Properties/AssemblyInfo.cs @@ -4,6 +4,7 @@ using System.Runtime.InteropServices; // Allgemeine Informationen über eine Assembly werden über die folgenden // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, // die mit einer Assembly verknüpft sind. + [assembly: AssemblyTitle("NPSharp server library")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] diff --git a/src/server/app.config b/src/server/app.config index a01ef9c..e63f192 100644 --- a/src/server/app.config +++ b/src/server/app.config @@ -1,4 +1,5 @@  +