- Tcp Server functionality
This commit is contained in:
parent
f7756e2032
commit
49c581840a
4 changed files with 48 additions and 8 deletions
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue