4 namespace FBServer.Host
6 partial class GameServer
8 # region Variables/Properties
10 bool hostStarted =
false;
17 #region DisconnectedClientEvent
18 public delegate
void DisconnectedClientEventHandler(
Client sender, EventArgs e);
22 if (DisconnectedClient != null)
23 DisconnectedClient(sender, e);
26 #region ConnectedClientEvent
27 public delegate
void ConnectedClientEventHandler(
Client sender, EventArgs e);
31 if (ConnectedClient != null)
32 ConnectedClient(sender, e);
36 public bool HostStarted
38 get {
return hostStarted; }
45 var config =
new NetPeerConfiguration(
"Final-Bomber")
47 MaximumConnections = ServerSettings.MaxConnection,
48 Port = ServerSettings.Port
52 config.PingInterval = 1f;
54 config.SimulatedMinimumLatency = 0.05f;
56 config.SetMessageTypeEnabled(NetIncomingMessageType.ConnectionLatencyUpdated,
true);
64 server =
new NetServer(config);
71 WriteOutput(
"Can't use old port, trying with Port: " + config.Port);
72 if (config.Port > 6800)
82 WriteOutput(
"[START]Game server has started");
83 WriteOutput(
"[PORT]: " + config.Port);
88 NetIncomingMessage message;
90 while ((message = server.ReadMessage()) != null)
92 NetConnection sender = message.SenderConnection;
93 Client currentClient = Clients.GetClientFromConnection(sender);
95 switch (message.MessageType)
98 case NetIncomingMessageType.StatusChanged:
99 if (sender.Status == NetConnectionStatus.Connected)
101 if (currentClient == null)
103 var con =
new Client(ref sender, clientId);
104 WriteOutput(
"[Connected]Client " + con.ClientId +
" connected with ip: " + sender.RemoteEndPoint.ToString());
105 Clients.AddClient(con);
107 OnConnectedClient(con,
new EventArgs());
112 if (sender.Status != NetConnectionStatus.Connected)
114 if (currentClient != null)
117 WriteOutput(
"[Disconnected]Client " + currentClient.
ClientId +
" has disconnected (" + message.ReadString() +
")");
119 Clients.RemoveClient(currentClient);
120 OnDisconnectedClient(currentClient,
new EventArgs());
127 case NetIncomingMessageType.Data:
128 if (message.LengthBytes > 0)
132 DataProcessing(message, ref currentClient);
136 WriteOutput(
"[ERROR]Client Id: " +
'\"' + currentClient.
ClientId +
'\"' +
137 " Ip: " + sender.RemoteEndPoint.ToString() +
" caused server exception");
138 WriteOutput(
"EXCEPTION: " + e.ToString());
139 sender.Disconnect(
"Caused server error");
144 case NetIncomingMessageType.ConnectionLatencyUpdated:
145 float ping = message.ReadFloat() * 1000;
146 Program.Log.Info(
"Player #" + currentClient.Player.Id +
" ping: " + ping +
"ms");
147 currentClient.Ping = ping;
159 WriteOutput(
"[END]Server has ended at " + System.DateTime.Now.ToString());
160 server.Shutdown(reson);
168 Program.Log.Info(msg);
void WriteOutput(string msg)
ConnectedClientEventHandler ConnectedClient
virtual void OnDisconnectedClient(Client sender, EventArgs e)
void EndServer(string reson)
virtual void OnConnectedClient(Client sender, EventArgs e)
DisconnectedClientEventHandler DisconnectedClient