I am getting the warning:
Non-nullable field 'tcpListener' must contain a non-null value when exiting constructor. Consider declaring the field as nullable.
Here is my code:
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace GameServer
{
class Server
{
public static int MaxPlayers { get; private set; }
public static int Port { get; private set; }
public static Dictionary<int, Client> clients = new Dictionary<int, Client>();
private static TcpListener tcpListener;
public static void Start(int _maxPlayers, int _port)
{
MaxPlayers = _maxPlayers;
Port = _port;
Console.WriteLine("Starting server...");
InitializeServerData();
tcpListener = new TcpListener(IPAddress.Any, Port);
tcpListener.Start();
tcpListener.BeginAcceptTcpClient(new AsyncCallback(TCPConnectCallback), null);
Console.WriteLine($"Server started on {Port}");
}
private static void TCPConnectCallback(IAsyncResult _result)
{
TcpClient _client = tcpListener.EndAcceptTcpClient(_result);
tcpListener.BeginAcceptTcpClient(new AsyncCallback(TCPConnectCallback), null);
Console.WriteLine($"Incoming connection from {_client.Client.RemoteEndPoint}...");
for (int i = 0; i <= MaxPlayers; i++)
{
if (clients[i].tcp.socket == null)
{
clients[i].tcp.Connect(_client);
return;
}
}
Console.WriteLine($"{_client.Client.RemoteEndPoint} failed to connect: Server full!");
}
private static void InitializeServerData()
{
for (int i = 0; i <= MaxPlayers; i++)
{
clients.Add(i, new Client(i));
}
}
}
}
If I change it to a nullable type, I get this warning:
Dereference of a possibly null reference.
If anyone has a fix to this, I would be very grateful.