- Tcp Server functionality

This commit is contained in:
u8sand_cp 2010-07-22 20:13:55 -07:00
parent f7756e2032
commit 49c581840a
4 changed files with 48 additions and 8 deletions

View file

@ -199,7 +199,7 @@ namespace MudEngine.GameManagement
}
public MudEngine.GameObjects.Characters.Controlled.PlayerBasic[] player;
public MudEngine.GameObjects.Characters.BaseCharacter[] player;
public MudEngine.Networking.Server server = new MudEngine.Networking.Server();
public ProtocolType ServerType = ProtocolType.Tcp;
public int ServerPort = 555;

View file

@ -33,5 +33,12 @@ namespace MudEngine.GameObjects.Characters
//the command off to the command engine for execution.
return CommandEngine.ExecuteCommand(command, character, game, room);
}
public void Initialize(ref MudEngine.Networking.ClientSocket rcs)
{
sock = rcs;
}
public MudEngine.Networking.ClientSocket sock;
}
}

View file

@ -15,10 +15,12 @@ namespace MudEngine.Networking
public ClientSocket()
{
type = 0;
used = false;
}
~ClientSocket()
{
type = 0;
used = false;
}
public int Send(byte[] ba)
{
@ -52,6 +54,7 @@ namespace MudEngine.Networking
sock.Close();
sock.Dispose();
type = 0;
used = false;
}
catch (Exception)
{
@ -63,5 +66,6 @@ namespace MudEngine.Networking
public ProtocolType type;
public IPAddress ip;
public Socket sock;
public bool used;
}
}

View file

@ -32,7 +32,7 @@ namespace MudEngine.Networking
}
server.CleanUp();
}
public bool InitializeTCP(int port, ref MudEngine.GameObjects.Characters.Controlled.PlayerBasic[] pbs)
public bool InitializeTCP(int port, ref MudEngine.GameObjects.Characters.BaseCharacter[] pbs)
{
if (stage != 0)
return false;
@ -41,12 +41,13 @@ namespace MudEngine.Networking
numberOfClients = pbs.Length;
clients = new ClientSocket[pbs.Length];
clientThreads = new Thread[pbs.Length];
players = pbs;
stage++;
return true;
}
public bool InitializeUDP(int port, ref MudEngine.GameObjects.Characters.Controlled.PlayerBasic[] pbs)
public bool InitializeUDP(int port, ref MudEngine.GameObjects.Characters.BaseCharacter[] pbs)
{
if (stage != 0)
return false;
@ -97,20 +98,48 @@ namespace MudEngine.Networking
}
else
{
/*while (stage == 2)
while (stage == 2)
{
}*/
int sub = -1;
do
{
for (int i = 0; i < numberOfClients; i++)
{
if (!clients[i].used)
{
sub = i;
break;
}
}
} while (sub == -1);
server.Accept(clients[sub]);
clients[sub].used = true;
players[sub].Initialize(ref clients[sub]);
ParameterizedThreadStart start = new ParameterizedThreadStart(ReceiveThread);
clientThreads[sub] = new Thread(start);
clientThreads[sub].Start();
}
}
}
private void ReceiveThread(object obj)
{
int sub = (int)obj;
while (stage == 2 && clients[sub].used)
{
byte[] buf = new byte[256];
clients[sub].Receive(buf);
}
}
private Thread serverThread;
private ServerSocket server;
private int stage;
MudEngine.GameObjects.Characters.Controlled.PlayerBasic[] players;
MudEngine.GameObjects.Characters.BaseCharacter[] players;
// TCP Stuff:
private ClientSocket[] clients;
private Thread[] clientThreads;
private int numberOfClients;
}
}
}