- put server in Game - created start server function in Game - created CommandRestart There are two different 'player classes' which do I use? PlayerBasic and BasePlayer.
116 lines
3.3 KiB
C#
116 lines
3.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Net;
|
|
using System.Net.Sockets;
|
|
using System.Threading;
|
|
|
|
/* Usage:
|
|
* Server MUDServer = new Server();
|
|
* MUDServer.InitializeUDP(666); or MUDServer.InitializeTCP(666);
|
|
* MUDServer.Start();
|
|
*/
|
|
|
|
namespace MudEngine.Networking
|
|
{
|
|
public class Server
|
|
{
|
|
public Server()
|
|
{
|
|
stage = 0;
|
|
server = new ServerSocket();
|
|
}
|
|
~Server()
|
|
{
|
|
stage = 0;
|
|
if (server.type == ProtocolType.Tcp)
|
|
{
|
|
for (int i = 0; i < numberOfClients; i++)
|
|
clients[i].CleanUp();
|
|
numberOfClients = 0;
|
|
}
|
|
server.CleanUp();
|
|
}
|
|
public bool InitializeTCP(int port, ref MudEngine.GameObjects.Characters.Controlled.PlayerBasic[] pbs)
|
|
{
|
|
if (stage != 0)
|
|
return false;
|
|
if (server.Initialize(port, ProtocolType.Tcp) < 0)
|
|
return false;
|
|
|
|
numberOfClients = pbs.Length;
|
|
clients = new ClientSocket[pbs.Length];
|
|
players = pbs;
|
|
|
|
stage++;
|
|
return true;
|
|
}
|
|
public bool InitializeUDP(int port, ref MudEngine.GameObjects.Characters.Controlled.PlayerBasic[] pbs)
|
|
{
|
|
if (stage != 0)
|
|
return false;
|
|
if (server.Initialize(port, ProtocolType.Udp) < 0)
|
|
return false;
|
|
|
|
players = pbs;
|
|
|
|
stage++;
|
|
return true;
|
|
}
|
|
public bool Start()
|
|
{
|
|
if (stage != 1)
|
|
return false;
|
|
if (server.Start() < 0)
|
|
return false;
|
|
if (server.Bind() < 0)
|
|
return false;
|
|
if (server.type == ProtocolType.Tcp)
|
|
if (server.Listen() < 0)
|
|
return false;
|
|
stage++;
|
|
serverThread = new Thread(ServerThread);
|
|
serverThread.Start();
|
|
return true;
|
|
}
|
|
public void EndServer()
|
|
{
|
|
stage = 0;
|
|
if (server.type == ProtocolType.Tcp)
|
|
{
|
|
for (int i = 0; i < numberOfClients; i++)
|
|
clients[i].CleanUp();
|
|
numberOfClients = 0;
|
|
}
|
|
server.CleanUp();
|
|
}
|
|
/*
|
|
* ServerThread, if UDP: Accepts messages(ReceiveFrom) and sends in correspondence to the correct player
|
|
* if TCP: Accepts connection and opens a separate thread to receive a data stream between the clien
|
|
*/
|
|
private void ServerThread()
|
|
{
|
|
if (server.type == ProtocolType.Udp)
|
|
{
|
|
|
|
}
|
|
else
|
|
{
|
|
/*while (stage == 2)
|
|
{
|
|
|
|
}*/
|
|
}
|
|
}
|
|
private Thread serverThread;
|
|
private ServerSocket server;
|
|
private int stage;
|
|
|
|
MudEngine.GameObjects.Characters.Controlled.PlayerBasic[] players;
|
|
|
|
// TCP Stuff:
|
|
private ClientSocket[] clients;
|
|
private int numberOfClients;
|
|
}
|
|
}
|