private void OnDiscoveryRequest(DiscoveryRequestEventArgs args) { NetOutgoingMessage msg = server.CreateMessage(64); // Header for unconnected message msg.Write(Token); msg.Write(neededMajor); msg.Write(neededMinor); msg.Write(neededBuild); msg.Write(server.UniqueIdentifier); msg.Write(serverName); byte flags = 0; // ToDo: Password protected servers msg.Write((byte)flags); msg.WriteVariableInt32(server.ConnectionsCount); msg.WriteVariableInt32(maxPlayers); args.Message = msg; }
private void OnMessage() { try { while (true) { server.MessageReceivedEvent.WaitOne(); NetIncomingMessage msg; while (server.ReadMessage(out msg)) { switch (msg.MessageType) { case NetIncomingMessageType.StatusChanged: { NetConnectionStatus status = (NetConnectionStatus)msg.ReadByte(); #if DEBUG Console.ForegroundColor = ConsoleColor.DarkCyan; Console.Write(" S "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("[" + msg.SenderEndPoint + "] " + status); #endif ClientStatusChangedEventArgs args = new ClientStatusChangedEventArgs(msg.SenderConnection, status); ClientStatusChanged?.Invoke(args); break; } case NetIncomingMessageType.Data: { #if DEBUG__ Console.ForegroundColor = ConsoleColor.Cyan; Console.Write(" R "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("[" + msg.SenderEndPoint + "] " + msg.LengthBytes + " bytes"); #endif MessageReceivedEventArgs args = new MessageReceivedEventArgs(msg, false); MessageReceived?.Invoke(args); break; } case NetIncomingMessageType.UnconnectedData: { #if DEBUG Console.ForegroundColor = ConsoleColor.Cyan; Console.Write(" R "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("Unconnected [" + msg.SenderEndPoint + "] " + msg.LengthBytes + " bytes"); #endif MessageReceivedEventArgs args = new MessageReceivedEventArgs(msg, true); MessageReceived?.Invoke(args); break; } case NetIncomingMessageType.ConnectionApproval: { ClientConnectedEventArgs args = new ClientConnectedEventArgs(msg); ClientConnected?.Invoke(args); if (args.Allow) { msg.SenderConnection.Approve(); } else { msg.SenderConnection.Deny("Incompatible version"); } break; } case NetIncomingMessageType.DiscoveryRequest: { #if DEBUG Console.ForegroundColor = ConsoleColor.Cyan; Console.Write(" Q "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("[" + msg.SenderEndPoint + "] " + msg.LengthBytes + " bytes"); #endif DiscoveryRequestEventArgs args = new DiscoveryRequestEventArgs(); DiscoveryRequest?.Invoke(args); server.SendDiscoveryResponse(args.Message, msg.SenderEndPoint); break; } #if DEBUG case NetIncomingMessageType.VerboseDebugMessage: Console.ForegroundColor = ConsoleColor.DarkGray; Console.Write(" D "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine(msg.ReadString()); break; case NetIncomingMessageType.DebugMessage: Console.ForegroundColor = ConsoleColor.Green; Console.Write(" D "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine(msg.ReadString()); break; case NetIncomingMessageType.WarningMessage: Console.ForegroundColor = ConsoleColor.Yellow; Console.Write(" W "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine(msg.ReadString()); break; case NetIncomingMessageType.ErrorMessage: Console.ForegroundColor = ConsoleColor.Red; Console.Write(" E "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine(msg.ReadString()); break; #endif } server.Recycle(msg); } } } catch (ThreadAbortException) { // Server is stopped } }
private void OnHandleMessagesThread() { while (server.Status != NetPeerStatus.NotRunning) { server.MessageReceivedEvent.WaitOne(); NetIncomingMessage msg; while (server.ReadMessage(out msg)) { switch (msg.MessageType) { case NetIncomingMessageType.StatusChanged: { NetConnectionStatus status = (NetConnectionStatus)msg.ReadByte(); #if NETWORK_DEBUG Console.ForegroundColor = ConsoleColor.DarkCyan; Console.Write(" S "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("[" + msg.SenderEndPoint + "] " + status); #endif ClientStatusChangedEventArgs args = new ClientStatusChangedEventArgs(msg.SenderConnection, status); ClientStatusChanged?.Invoke(args); break; } case NetIncomingMessageType.Data: { #if NETWORK_DEBUG__ Console.ForegroundColor = ConsoleColor.Cyan; Console.Write(" R "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("[" + msg.SenderEndPoint + "] " + msg.LengthBytes + " bytes"); #endif MessageReceivedEventArgs args = new MessageReceivedEventArgs(msg, false); MessageReceived?.Invoke(args); break; } case NetIncomingMessageType.UnconnectedData: { #if NETWORK_DEBUG Console.ForegroundColor = ConsoleColor.Cyan; Console.Write(" R "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("Unconnected [" + msg.SenderEndPoint + "] " + msg.LengthBytes + " bytes"); #endif MessageReceivedEventArgs args = new MessageReceivedEventArgs(msg, true); MessageReceived?.Invoke(args); break; } case NetIncomingMessageType.ConnectionApproval: { ClientConnectedEventArgs args = new ClientConnectedEventArgs(msg); ClientConnected?.Invoke(args); if (args.DenyReason == null) { msg.SenderConnection.Approve(); } else { msg.SenderConnection.Deny(args.DenyReason); } break; } case NetIncomingMessageType.DiscoveryRequest: { #if NETWORK_DEBUG Console.ForegroundColor = ConsoleColor.Cyan; Console.Write(" Q "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("[" + msg.SenderEndPoint + "] " + msg.LengthBytes + " bytes"); #endif DiscoveryRequestEventArgs args = new DiscoveryRequestEventArgs(); DiscoveryRequest?.Invoke(args); server.SendDiscoveryResponse(args.Message, msg.SenderEndPoint); break; } #if NETWORK_DEBUG case NetIncomingMessageType.VerboseDebugMessage: Console.ForegroundColor = ConsoleColor.DarkGray; Console.Write(" D "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine(msg.ReadString()); break; case NetIncomingMessageType.DebugMessage: Console.ForegroundColor = ConsoleColor.Green; Console.Write(" D "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine(msg.ReadString()); break; case NetIncomingMessageType.WarningMessage: Console.ForegroundColor = ConsoleColor.Yellow; Console.Write(" W "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine(msg.ReadString()); break; case NetIncomingMessageType.ErrorMessage: Console.ForegroundColor = ConsoleColor.Red; Console.Write(" E "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine(msg.ReadString()); break; #endif } server.Recycle(msg); } } server = null; Debug.WriteLine("ServerConnection: OnHandleMessagesThread exited!"); }