Player.ToString retuns IPlayer.Name
ServerDirector.GetPlayer() helper method added for getting a player from the server without providing access to the servers collection libraries. ConnectState.Render() has some test code used when writing ServerDirector.GetPlayer() Started converting ConnectedPlayer and ConnectedThread collections to a single Dictionary collection. Not migrating everything to it until helper methods are finished.
This commit is contained in:
parent
ca97b9c439
commit
f977376ac3
6 changed files with 54 additions and 18 deletions
|
@ -2,6 +2,5 @@
|
||||||
{
|
{
|
||||||
public interface ILoadable
|
public interface ILoadable
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -3,7 +3,7 @@
|
||||||
public interface IPlayer
|
public interface IPlayer
|
||||||
{
|
{
|
||||||
IState CurrentState { get; }
|
IState CurrentState { get; }
|
||||||
|
string Name { get; set; }
|
||||||
void Disconnect();
|
void Disconnect();
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -11,10 +11,13 @@ namespace WinPC.Engine.Core
|
||||||
|
|
||||||
public List<byte> buffer = new List<byte>();
|
public List<byte> buffer = new List<byte>();
|
||||||
|
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
public Player(IState initialState, Socket connection)
|
public Player(IState initialState, Socket connection)
|
||||||
{
|
{
|
||||||
Connection = connection;
|
Connection = connection;
|
||||||
CurrentState = initialState;
|
CurrentState = initialState;
|
||||||
|
Name = "Player";
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Disconnect()
|
public void Disconnect()
|
||||||
|
@ -26,5 +29,10 @@ namespace WinPC.Engine.Core
|
||||||
{
|
{
|
||||||
CurrentState = state;
|
CurrentState = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return this.Name;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -2,10 +2,12 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
using System.Linq;
|
||||||
using WinPC.Engine.Abstract.Directors;
|
using WinPC.Engine.Abstract.Directors;
|
||||||
using WinPC.Engine.Abstract.Networking;
|
using WinPC.Engine.Abstract.Networking;
|
||||||
using WinPC.Engine.Core;
|
using WinPC.Engine.Core;
|
||||||
using WinPC.Engine.States;
|
using WinPC.Engine.States;
|
||||||
|
using WinPC.Engine.Abstract.Core;
|
||||||
|
|
||||||
namespace WinPC.Engine.Directors
|
namespace WinPC.Engine.Directors
|
||||||
{
|
{
|
||||||
|
@ -15,6 +17,7 @@ namespace WinPC.Engine.Directors
|
||||||
public List<Thread> ConnectionThreads { get; private set; }
|
public List<Thread> ConnectionThreads { get; private set; }
|
||||||
public List<Player> ConnectedPlayers { get; private set; }
|
public List<Player> ConnectedPlayers { get; private set; }
|
||||||
|
|
||||||
|
public Dictionary<Player, Thread> ConnectedUsers { get; private set; }
|
||||||
|
|
||||||
public IServer Server { get; set; }
|
public IServer Server { get; set; }
|
||||||
|
|
||||||
|
@ -23,7 +26,7 @@ namespace WinPC.Engine.Directors
|
||||||
Server = server;
|
Server = server;
|
||||||
ConnectedPlayers = new List<Player>(Server.MaxConnections);
|
ConnectedPlayers = new List<Player>(Server.MaxConnections);
|
||||||
ConnectionThreads = new List<Thread>(Server.MaxConnections);
|
ConnectionThreads = new List<Thread>(Server.MaxConnections);
|
||||||
|
ConnectedUsers = new Dictionary<Player, Thread>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddConnection(Socket connection)
|
public void AddConnection(Socket connection)
|
||||||
|
@ -31,8 +34,12 @@ namespace WinPC.Engine.Directors
|
||||||
var player = new Player(new ConnectState(this), connection);
|
var player = new Player(new ConnectState(this), connection);
|
||||||
ConnectedPlayers.Add(player);
|
ConnectedPlayers.Add(player);
|
||||||
|
|
||||||
|
Thread userThread = new Thread(ReceiveDataThread);
|
||||||
|
|
||||||
ConnectionThreads.Add(new Thread(ReceiveDataThread));
|
//TODO: Replace ConnectedPlayers and ConnectionThreads with ConnectedUsers
|
||||||
|
ConnectedUsers.Add(player, userThread);
|
||||||
|
|
||||||
|
ConnectionThreads.Add(userThread);
|
||||||
var index = ConnectionThreads.Count - 1;
|
var index = ConnectionThreads.Count - 1;
|
||||||
|
|
||||||
ConnectionThreads[index].Name = "Player";
|
ConnectionThreads[index].Name = "Player";
|
||||||
|
@ -114,5 +121,21 @@ namespace WinPC.Engine.Directors
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns a reference to the specified player if s/he is connected to the server.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="player">Name of the player to return</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public bool GetPlayer(string name, out IPlayer player)
|
||||||
|
{
|
||||||
|
var connectedPlayer = from p in ConnectedUsers
|
||||||
|
where p.Key.Name == name
|
||||||
|
select p.Key;
|
||||||
|
|
||||||
|
player = connectedPlayer.First();
|
||||||
|
|
||||||
|
return player == null ? true : false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -4,6 +4,7 @@ using System.Text;
|
||||||
using WinPC.Engine.Abstract.Core;
|
using WinPC.Engine.Abstract.Core;
|
||||||
using WinPC.Engine.Commands;
|
using WinPC.Engine.Commands;
|
||||||
using WinPC.Engine.Directors;
|
using WinPC.Engine.Directors;
|
||||||
|
using WinPC.Engine.Core;
|
||||||
|
|
||||||
namespace WinPC.Engine.States
|
namespace WinPC.Engine.States
|
||||||
{
|
{
|
||||||
|
@ -26,11 +27,17 @@ namespace WinPC.Engine.States
|
||||||
|
|
||||||
Connection = Director.ConnectedPlayers[index].Connection;
|
Connection = Director.ConnectedPlayers[index].Connection;
|
||||||
|
|
||||||
Director.ConnectedPlayers[index].Connection.Send(Encoding.GetBytes("Welcome to Scionwest's Mud Engine!"+"\n\r"));
|
Connection.Send(Encoding.GetBytes("Welcome to Scionwest's Mud Engine!"+"\n\r"));
|
||||||
Director.ConnectedPlayers[index].Connection.Send(Encoding.GetBytes("Please enter your name" + "\n\r"));
|
Connection.Send(Encoding.GetBytes("Please enter your name" + "\n\r"));
|
||||||
|
|
||||||
|
//Just used for testing ServerDirector.GetPlayer method
|
||||||
|
IPlayer player = null;
|
||||||
|
bool validPlayer = Director.GetPlayer("Player", out player);
|
||||||
|
|
||||||
|
//player = player ?? new IPlayer().Create();
|
||||||
|
|
||||||
|
if (validPlayer)
|
||||||
|
Connection.Send(Encoding.GetBytes("Welcome " + player.Name));
|
||||||
}
|
}
|
||||||
|
|
||||||
public ICommand GetCommand()
|
public ICommand GetCommand()
|
||||||
|
|
|
@ -30,7 +30,6 @@ namespace WinPC.Engine.States
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ICommand GetCommand()
|
public ICommand GetCommand()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue