Gameserver - Added more features to standalone srver

This commit is contained in:
Dennis Andersen 2014-02-17 08:53:15 +01:00
parent 85ebe3a7ca
commit 5119af8127
10 changed files with 359 additions and 61 deletions

View File

@ -73,21 +73,29 @@
<OutDir>$(SolutionDir)..\Bin\DLL\</OutDir> <OutDir>$(SolutionDir)..\Bin\DLL\</OutDir>
<TargetName>$(ProjectName)_$(PlatformShortName)D</TargetName> <TargetName>$(ProjectName)_$(PlatformShortName)D</TargetName>
<IntDir>$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\</IntDir> <IntDir>$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\</IntDir>
<IncludePath>C:\Program Files %28x86%29\Visual Leak Detector\include;$(IncludePath)</IncludePath>
<LibraryPath>C:\Program Files %28x86%29\Visual Leak Detector\lib\Win32;$(LibraryPath)</LibraryPath>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>$(SolutionDir)..\Bin\DLL\</OutDir> <OutDir>$(SolutionDir)..\Bin\DLL\</OutDir>
<TargetName>$(ProjectName)_$(PlatformShortName)</TargetName> <TargetName>$(ProjectName)_$(PlatformShortName)</TargetName>
<IntDir>$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\</IntDir> <IntDir>$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\</IntDir>
<IncludePath>C:\Program Files %28x86%29\Visual Leak Detector\include;$(IncludePath)</IncludePath>
<LibraryPath>C:\Program Files %28x86%29\Visual Leak Detector\lib\Win32;$(LibraryPath)</LibraryPath>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<OutDir>$(SolutionDir)..\Bin\DLL\</OutDir> <OutDir>$(SolutionDir)..\Bin\DLL\</OutDir>
<TargetName>$(ProjectName)_$(PlatformShortName)D</TargetName> <TargetName>$(ProjectName)_$(PlatformShortName)D</TargetName>
<IntDir>$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\</IntDir> <IntDir>$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\</IntDir>
<IncludePath>C:\Program Files %28x86%29\Visual Leak Detector\include;$(IncludePath)</IncludePath>
<LibraryPath>C:\Program Files %28x86%29\Visual Leak Detector\lib\Win64;$(LibraryPath)</LibraryPath>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutDir>$(SolutionDir)..\Bin\DLL\</OutDir> <OutDir>$(SolutionDir)..\Bin\DLL\</OutDir>
<TargetName>$(ProjectName)_$(PlatformShortName)</TargetName> <TargetName>$(ProjectName)_$(PlatformShortName)</TargetName>
<IntDir>$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\</IntDir> <IntDir>$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\</IntDir>
<IncludePath>C:\Program Files %28x86%29\Visual Leak Detector\include;$(IncludePath)</IncludePath>
<LibraryPath>C:\Program Files %28x86%29\Visual Leak Detector\lib\Win64;$(LibraryPath)</LibraryPath>
</PropertyGroup> </PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile> <ClCompile>

View File

@ -1,4 +1,8 @@
#include "StandaloneGameServerCLI.h" #include "StandaloneGameServerCLI.h"
#include <string>
#include < stdio.h >
#include < stdlib.h >
#include < vcclr.h >
using namespace System; using namespace System;
@ -6,6 +10,11 @@ using namespace System::Windows::Interop;
using namespace System::Windows; using namespace System::Windows;
using namespace System::Runtime::InteropServices; using namespace System::Runtime::InteropServices;
void StandaloneGameServerCLI::NewClientConnected(int ID, wchar_t clientAlias[255], wchar_t clientIp[255])
{
}
StandaloneGameServerCLI::StandaloneGameServerCLI() StandaloneGameServerCLI::StandaloneGameServerCLI()
{ {
} }
@ -17,13 +26,12 @@ StandaloneGameServerCLI::~StandaloneGameServerCLI()
DanBiasServerReturn StandaloneGameServerCLI::ServerInitiate(ServerInitDesc desc) DanBiasServerReturn StandaloneGameServerCLI::ServerInitiate(ServerInitDesc desc)
{ {
DanBias::GameServerAPI::ServerInitDesc d; DanBias::GameServerAPI::ServerInitDesc d;
//Convert from String to char* pin_ptr<const wchar_t> wch = PtrToStringChars(desc.mainOptions.serverName);
IntPtr p = Marshal::StringToHGlobalAnsi(desc.serverName); std::wstring temp = wch;
d.serverName = static_cast<char*>(p.ToPointer()); d.serverName = temp.c_str();
Marshal::FreeHGlobal(p); d.listenPort = desc.mainOptions.listenPort;
d.listenPort = desc.listenPort; DanBias::GameServerAPI::NotifyWhenClientConnect((DanBias::GameServerAPI::ClientConnectedNotify)StandaloneGameServerCLI::NewClientConnected);
d.broadcast = desc.broadcast;
return (DanBiasServerReturn)DanBias::GameServerAPI::ServerInitiate(d); return (DanBiasServerReturn)DanBias::GameServerAPI::ServerInitiate(d);
} }
@ -59,9 +67,10 @@ bool StandaloneGameServerCLI::ServerIsRunning()
return DanBias::GameServerAPI::ServerIsRunning(); return DanBias::GameServerAPI::ServerIsRunning();
} }
void StandaloneGameServerCLI::GameSetMapId(const int val) void StandaloneGameServerCLI::GameSetMapName(String^ value)
{ {
DanBias::GameServerAPI::GameSetMapId(val); pin_ptr<const wchar_t> wch = PtrToStringChars(value);
DanBias::GameServerAPI::GameSetMapName(wch);
} }
void StandaloneGameServerCLI::GameSetMaxClients(const int val) void StandaloneGameServerCLI::GameSetMaxClients(const int val)
@ -69,9 +78,10 @@ void StandaloneGameServerCLI::GameSetMaxClients(const int val)
DanBias::GameServerAPI::GameSetMaxClients(val); DanBias::GameServerAPI::GameSetMaxClients(val);
} }
void StandaloneGameServerCLI::GameSetGameMode(const int val) void StandaloneGameServerCLI::GameSetGameMode(String^ value)
{ {
DanBias::GameServerAPI::GameSetGameMode(val); pin_ptr<const wchar_t> wch = PtrToStringChars(value);
DanBias::GameServerAPI::GameSetGameMode(wch);
} }
void StandaloneGameServerCLI::GameSetGameTime(const int val) void StandaloneGameServerCLI::GameSetGameTime(const int val)

View File

@ -16,11 +16,12 @@ namespace System { namespace Windows { namespace Interop
}; };
public value struct ServerInitDesc public value struct ServerInitDesc
{
value struct MainOptions
{ {
System::String^ serverName; System::String^ serverName;
int listenPort; int listenPort;
bool broadcast; //Not fully implemented! } mainOptions;
}; };
public value struct GameServerInfo public value struct GameServerInfo
@ -31,6 +32,9 @@ namespace System { namespace Windows { namespace Interop
public ref class StandaloneGameServerCLI public ref class StandaloneGameServerCLI
{ {
private:
static void NewClientConnected(int ID, wchar_t clientAlias[255], wchar_t clientIp[255]);
public: public:
StandaloneGameServerCLI(); StandaloneGameServerCLI();
~StandaloneGameServerCLI(); ~StandaloneGameServerCLI();
@ -42,9 +46,9 @@ namespace System { namespace Windows { namespace Interop
GameServerInfo ServerGetInfo(); GameServerInfo ServerGetInfo();
bool ServerIsRunning(); bool ServerIsRunning();
void GameSetMapId(const int val); void GameSetMapName(String^ val);
void GameSetMaxClients(const int val); void GameSetMaxClients(const int val);
void GameSetGameMode(const int val); void GameSetGameMode(String^ val);
void GameSetGameTime(const int val); void GameSetGameTime(const int val);
int GameGetMapId(); int GameGetMapId();
int GameGetMaxClients(); int GameGetMaxClients();

View File

@ -4,7 +4,7 @@
#ifndef DANBIAS_SERVER_DANBIAS_SERVER_H #ifndef DANBIAS_SERVER_DANBIAS_SERVER_H
#define DANBIAS_SERVER_DANBIAS_SERVER_H #define DANBIAS_SERVER_DANBIAS_SERVER_H
//#include <vld.h> #include <vld.h>
#define DANBIAS_SERVER #define DANBIAS_SERVER
@ -30,20 +30,20 @@ namespace DanBias
public: public:
struct ServerInitDesc struct ServerInitDesc
{ {
char* serverName; const wchar_t* serverName;
int listenPort; int listenPort;
bool broadcast; //Not fully implemented!
ServerInitDesc() ServerInitDesc()
: serverName("Game Server") : serverName(L"Game Server")
, listenPort(15152) , listenPort(15152)
, broadcast(true)
{}; {};
}; };
struct GameServerInfo struct GameServerInfo
{ {
unsigned int listenPort; // If set to 0, the default port 15151 will be used int listenPort;
const char *serverIp; // This cant be mofidfied.. wchar_t serverIp[255];
}; };
typedef void(*ClientConnectedNotify)(int ID, wchar_t clientAlias[255], wchar_t clientIp[255]);
typedef void(*ClientDisconnectedNotify)(int ID);
public: public:
static DanBiasServerReturn ServerInitiate(const ServerInitDesc& desc); static DanBiasServerReturn ServerInitiate(const ServerInitDesc& desc);
@ -52,10 +52,12 @@ namespace DanBias
static void ServerUpdate(); static void ServerUpdate();
static GameServerInfo ServerGetInfo(); static GameServerInfo ServerGetInfo();
static bool ServerIsRunning(); static bool ServerIsRunning();
static void NotifyWhenClientConnect(ClientConnectedNotify func);
static void NotifyWhenClientDisconnect(ClientDisconnectedNotify func);
static void GameSetMapId(const int& val); static void GameSetMapName(const wchar_t* val);
static void GameSetMaxClients(const int& val); static void GameSetMaxClients(const int& val);
static void GameSetGameMode(const int& val); static void GameSetGameMode(const wchar_t* val);
static void GameSetGameTime(const int& val); static void GameSetGameTime(const int& val);
static int GameGetMapId(); static int GameGetMapId();
static int GameGetMaxClients(); static int GameGetMaxClients();

View File

@ -48,7 +48,7 @@ namespace DanBias
bool GameLobby::StartGameSession( ) bool GameLobby::StartGameSession( )
{ {
//Check if all clients is ready //Check if all clients is ready
if(this->GetClientCount() == this->readyList.Size()) if(this->GetClientCount() && this->GetClientCount() == this->readyList.Size())
{ {
GameSession::GameDescription desc; GameSession::GameDescription desc;
desc.maxClients = this->description.maxClients; desc.maxClients = this->description.maxClients;
@ -59,10 +59,10 @@ namespace DanBias
desc.clients = this->clients; desc.clients = this->clients;
if(desc.gameTime == 0.0f) if(desc.gameTime == 0.0f)
desc.gameTime = (int)(60.0f * 10.0f); //note: Default game time length should be fetched from somewhere. desc.gameTime = (int)(60.0f * 10.0f); //note: should be fetched from somewhere.
if(desc.maxClients == 0) if(desc.maxClients == 0)
desc.maxClients = 10; //note: Default should be fetched somewhere else.. desc.maxClients = 10; //note: should be fetched somewhere else..
this->clients.Clear(); //Remove clients from lobby list this->clients.Clear(); //Remove clients from lobby list

View File

@ -23,18 +23,31 @@ using namespace Oyster::Network;
using namespace Oyster::Thread; using namespace Oyster::Thread;
using namespace Utility; using namespace Utility;
void DefaultClientConnectedNotify(int ID, wchar_t clientAlias[255], wchar_t clientIp[255])
{
}
void DefaultClientDisconnectedNotify(int ID)
{
}
namespace namespace
{ {
GameLobby lobby; GameLobby lobby;
NetworkServer server; NetworkServer server;
WinTimer timer; WinTimer timer;
GameServerAPI::ClientConnectedNotify clientConnectedCallback = DefaultClientConnectedNotify;
GameServerAPI::ClientDisconnectedNotify clientDisconnectedCallback = DefaultClientDisconnectedNotify;
} }
DanBiasServerReturn GameServerAPI::ServerInitiate(const ServerInitDesc& desc) DanBiasServerReturn GameServerAPI::ServerInitiate(const ServerInitDesc& desc)
{ {
if(server.Init(desc.listenPort, &lobby) == NetworkServer::ServerReturnCode_Error) ServerOptions opt;
opt.mainOptions.listenPort = desc.listenPort;
opt.mainOptions.ownerSession = &lobby;
if(server.Init(opt) == NetworkServer::ServerReturnCode_Error)
{ {
return DanBiasServerReturn_Error; return DanBiasServerReturn_Error;
} }
@ -86,7 +99,9 @@ void GameServerAPI::ServerUpdate()
GameServerAPI::GameServerInfo GameServerAPI::ServerGetInfo() GameServerAPI::GameServerInfo GameServerAPI::ServerGetInfo()
{ {
GameServerAPI::GameServerInfo i; GameServerAPI::GameServerInfo i;
i.serverIp = server.GetLanAddress().c_str(); std::wstring temp;
Utility::String::StringToWstring(server.GetLanAddress().c_str(), temp) ;
memcpy(&i.serverIp[0], temp.c_str(), sizeof(wchar_t) * (temp.length() + 1));
i.listenPort = server.GetPort(); i.listenPort = server.GetPort();
return i; return i;
} }
@ -94,12 +109,24 @@ bool GameServerAPI::ServerIsRunning()
{ {
return server.IsRunning(); return server.IsRunning();
} }
void GameServerAPI::NotifyWhenClientConnect(ClientConnectedNotify func)
{
if(!func) clientConnectedCallback = DefaultClientConnectedNotify;
else clientConnectedCallback = func;
void GameServerAPI::GameSetMapId(const int& val)
}
void GameServerAPI::NotifyWhenClientDisconnect(ClientDisconnectedNotify func)
{
if(!func) clientDisconnectedCallback = DefaultClientDisconnectedNotify;
else clientDisconnectedCallback = func;
}
void GameServerAPI::GameSetMapName(const wchar_t* val)
{ {
LobbyLevelData d; LobbyLevelData d;
lobby.GetGameDesc(d); lobby.GetGameDesc(d);
d.mapNumber = val; //d.mapNumber = val; //TODO: implement
lobby.SetGameDesc(d); lobby.SetGameDesc(d);
} }
void GameServerAPI::GameSetMaxClients(const int& val) void GameServerAPI::GameSetMaxClients(const int& val)
@ -109,11 +136,11 @@ void GameServerAPI::GameSetMaxClients(const int& val)
d.maxClients = val; d.maxClients = val;
lobby.SetGameDesc(d); lobby.SetGameDesc(d);
} }
void GameServerAPI::GameSetGameMode(const int& val) void GameServerAPI::GameSetGameMode(const wchar_t* val)
{ {
LobbyLevelData d; LobbyLevelData d;
lobby.GetGameDesc(d); lobby.GetGameDesc(d);
d.gameMode = val; //d.gameMode = val; //TODO: implement
lobby.SetGameDesc(d); lobby.SetGameDesc(d);
} }
void GameServerAPI::GameSetGameTime(const int& val) void GameServerAPI::GameSetGameTime(const int& val)

View File

@ -16,10 +16,8 @@
#include "Utilities.h" #include "Utilities.h"
#include "Thread/OysterThread.h" #include "Thread/OysterThread.h"
#include "WinTimer.h"
#ifndef _DEBUG
#include <winsock2.h>
#endif
using namespace Oyster::Network; using namespace Oyster::Network;
using namespace Utility::DynamicMemory; using namespace Utility::DynamicMemory;
@ -64,6 +62,13 @@ void Broadcast()
} }
} }
struct TimeInstance
{
float length;
float previous;
TimeInstance() :length(0.0f), previous(0.0f) {}
TimeInstance(float length, float previous) :length(length), previous(previous) {}
};
struct NetworkServer::PrivateData : public IThreadObject struct NetworkServer::PrivateData : public IThreadObject
{ {
public: public:
@ -74,6 +79,8 @@ public:
, isReleased(0) , isReleased(0)
, isRunning(0) , isRunning(0)
, port(-1) , port(-1)
, broadcast(0)
, broadcastTime(1.0f, 0.0f)
{ } { }
~PrivateData() ~PrivateData()
{ } { }
@ -91,11 +98,22 @@ public:
bool isReleased; bool isReleased;
bool isRunning; bool isRunning;
int port; int port;
bool broadcast;
TimeInstance broadcastTime;
Utility::WinTimer serverTimer;
}; };
bool NetworkServer::PrivateData::DoWork() bool NetworkServer::PrivateData::DoWork()
{ {
//Broadcast(); if(broadcast)
{
if( (this->serverTimer.getElapsedSeconds() - this->broadcastTime.previous) >= this->broadcastTime.length )
{
Broadcast();
}
}
/** Check for new clients **/ /** Check for new clients **/
if(postBox.IsFull()) if(postBox.IsFull())
@ -144,11 +162,11 @@ NetworkServer::~NetworkServer()
} }
} }
NetworkServer::ServerReturnCode NetworkServer::Init(const int& port, NetworkSession const* mainSession) NetworkServer::ServerReturnCode NetworkServer::Init(ServerOptions& options)
{ {
this->privateData->mainSession = const_cast<NetworkSession*>(mainSession); this->privateData->mainSession = const_cast<NetworkSession*>(options.mainOptions.ownerSession);
//Check if it's a valid port //Check if it's a valid port
if(port == 0 || port == -1) if(options.mainOptions.listenPort == 0 || options.mainOptions.listenPort == -1)
{ {
return NetworkServer::ServerReturnCode_Error; return NetworkServer::ServerReturnCode_Error;
} }
@ -163,7 +181,7 @@ NetworkServer::ServerReturnCode NetworkServer::Init(const int& port, NetworkSess
//Initiate listener //Initiate listener
this->privateData->listener = new Listener(&this->privateData->postBox); this->privateData->listener = new Listener(&this->privateData->postBox);
if(!this->privateData->listener->Init(port, false)) if(!this->privateData->listener->Init(options.mainOptions.listenPort, false))
{ {
return NetworkServer::ServerReturnCode_Error; return NetworkServer::ServerReturnCode_Error;
} }
@ -180,6 +198,7 @@ NetworkServer::ServerReturnCode NetworkServer::Init(const int& port, NetworkSess
NetworkServer::ServerReturnCode NetworkServer::Start() NetworkServer::ServerReturnCode NetworkServer::Start()
{ {
this->privateData->serverTimer.reset();
//Start listener //Start listener
if(!this->privateData->listener->Start()) if(!this->privateData->listener->Start())
{ {
@ -234,15 +253,17 @@ int NetworkServer::Update()
int c = 0; int c = 0;
while(!this->privateData->clientQueue.IsEmpty()) while(!this->privateData->clientQueue.IsEmpty())
{ {
SmartPointer<NetworkClient> client = this->privateData->clientQueue.Pop();
if(this->privateData->mainSession) if(this->privateData->mainSession)
{ {
this->privateData->mainSession->ClientConnectedEvent(this->privateData->clientQueue.Pop()); this->privateData->mainSession->ClientConnectedEvent(client);
c++; c++;
} }
else else
{ {
//Clients have nowhere to go? //Clients have nowhere to go?
this->privateData->clientQueue.Pop()->Disconnect(); client->Disconnect();
} }
} }
return c; return c;

View File

@ -18,6 +18,34 @@ namespace Oyster
{ {
extern "C" extern "C"
{ {
struct ServerOptions
{
struct BroadcastOptions
{
//bool broadcast;
//float broadcastInterval;
//std::wstring subnetToBroadcast;
//CustomNetProtocol broadcastMessage;
//BroadcastOptions()
//{
// broadcast = true;
// broadcastInterval = 1.0f;
// subnetToBroadcast = L"192.168.0.1";
//}
} broadcastOptions;
struct MainOptions
{
NetworkSession* ownerSession;
int listenPort;
MainOptions()
{
ownerSession = 0;
listenPort = 0;
}
} mainOptions;
};
class NET_API_EXPORT NetworkServer class NET_API_EXPORT NetworkServer
{ {
public: public:
@ -39,7 +67,7 @@ namespace Oyster
* @param mainSession The main session the server will send connected clients to. * @param mainSession The main session the server will send connected clients to.
* @return The server returncode * @return The server returncode
*/ */
ServerReturnCode Init(const int& port, NetworkSession const* mainSession); ServerReturnCode Init(ServerOptions& options);
/** Starts the server allowing clients to connect /** Starts the server allowing clients to connect
* @return The server returncode * @return The server returncode

View File

@ -37,15 +37,29 @@
this.panel_serverOptions = new System.Windows.Forms.Panel(); this.panel_serverOptions = new System.Windows.Forms.Panel();
this.panel_commands = new System.Windows.Forms.Panel(); this.panel_commands = new System.Windows.Forms.Panel();
this.panel_clientArea = new System.Windows.Forms.Panel(); this.panel_clientArea = new System.Windows.Forms.Panel();
this.ServerInfoTextArea = new System.Windows.Forms.RichTextBox();
this.splitter1 = new System.Windows.Forms.Splitter();
this.clientInfoBox = new System.Windows.Forms.ListBox(); this.clientInfoBox = new System.Windows.Forms.ListBox();
this.buttonStartGame = new System.Windows.Forms.Button();
this.nrOfClients = new System.Windows.Forms.NumericUpDown();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.gameModes = new System.Windows.Forms.ComboBox();
this.timeLimit = new System.Windows.Forms.NumericUpDown();
this.label3 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.mapName = new System.Windows.Forms.TextBox();
((System.ComponentModel.ISupportInitialize)(this.listenPort)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.listenPort)).BeginInit();
this.panel_serverOptions.SuspendLayout(); this.panel_serverOptions.SuspendLayout();
this.panel_commands.SuspendLayout();
this.panel_clientArea.SuspendLayout(); this.panel_clientArea.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nrOfClients)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.timeLimit)).BeginInit();
this.SuspendLayout(); this.SuspendLayout();
// //
// serverToggle // serverToggle
// //
this.serverToggle.Location = new System.Drawing.Point(90, 81); this.serverToggle.Location = new System.Drawing.Point(9, 81);
this.serverToggle.Name = "serverToggle"; this.serverToggle.Name = "serverToggle";
this.serverToggle.Size = new System.Drawing.Size(75, 23); this.serverToggle.Size = new System.Drawing.Size(75, 23);
this.serverToggle.TabIndex = 0; this.serverToggle.TabIndex = 0;
@ -56,7 +70,7 @@
// lanBroadcast // lanBroadcast
// //
this.lanBroadcast.AutoSize = true; this.lanBroadcast.AutoSize = true;
this.lanBroadcast.Location = new System.Drawing.Point(81, 58); this.lanBroadcast.Location = new System.Drawing.Point(9, 58);
this.lanBroadcast.Name = "lanBroadcast"; this.lanBroadcast.Name = "lanBroadcast";
this.lanBroadcast.Size = new System.Drawing.Size(95, 17); this.lanBroadcast.Size = new System.Drawing.Size(95, 17);
this.lanBroadcast.TabIndex = 1; this.lanBroadcast.TabIndex = 1;
@ -69,6 +83,7 @@
this.serverName.Name = "serverName"; this.serverName.Name = "serverName";
this.serverName.Size = new System.Drawing.Size(95, 20); this.serverName.Size = new System.Drawing.Size(95, 20);
this.serverName.TabIndex = 3; this.serverName.TabIndex = 3;
this.serverName.Text = "GameServer";
// //
// label_serverName // label_serverName
// //
@ -120,32 +135,173 @@
this.panel_serverOptions.Controls.Add(this.label_serverName); this.panel_serverOptions.Controls.Add(this.label_serverName);
this.panel_serverOptions.Location = new System.Drawing.Point(12, 12); this.panel_serverOptions.Location = new System.Drawing.Point(12, 12);
this.panel_serverOptions.Name = "panel_serverOptions"; this.panel_serverOptions.Name = "panel_serverOptions";
this.panel_serverOptions.Size = new System.Drawing.Size(183, 112); this.panel_serverOptions.Size = new System.Drawing.Size(183, 113);
this.panel_serverOptions.TabIndex = 6; this.panel_serverOptions.TabIndex = 6;
// //
// panel_commands // panel_commands
// //
this.panel_commands.Location = new System.Drawing.Point(12, 130); this.panel_commands.Controls.Add(this.mapName);
this.panel_commands.Controls.Add(this.timeLimit);
this.panel_commands.Controls.Add(this.gameModes);
this.panel_commands.Controls.Add(this.label3);
this.panel_commands.Controls.Add(this.label2);
this.panel_commands.Controls.Add(this.label4);
this.panel_commands.Controls.Add(this.label1);
this.panel_commands.Controls.Add(this.nrOfClients);
this.panel_commands.Controls.Add(this.buttonStartGame);
this.panel_commands.Location = new System.Drawing.Point(12, 131);
this.panel_commands.Name = "panel_commands"; this.panel_commands.Name = "panel_commands";
this.panel_commands.Size = new System.Drawing.Size(183, 231); this.panel_commands.Size = new System.Drawing.Size(183, 230);
this.panel_commands.TabIndex = 7; this.panel_commands.TabIndex = 7;
this.panel_commands.Visible = false;
// //
// panel_clientArea // panel_clientArea
// //
this.panel_clientArea.Controls.Add(this.ServerInfoTextArea);
this.panel_clientArea.Controls.Add(this.splitter1);
this.panel_clientArea.Controls.Add(this.clientInfoBox); this.panel_clientArea.Controls.Add(this.clientInfoBox);
this.panel_clientArea.Location = new System.Drawing.Point(202, 12); this.panel_clientArea.Location = new System.Drawing.Point(202, 12);
this.panel_clientArea.Name = "panel_clientArea"; this.panel_clientArea.Name = "panel_clientArea";
this.panel_clientArea.Size = new System.Drawing.Size(303, 349); this.panel_clientArea.Size = new System.Drawing.Size(303, 349);
this.panel_clientArea.TabIndex = 8; this.panel_clientArea.TabIndex = 8;
// //
// ServerInfoTextArea
//
this.ServerInfoTextArea.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
this.ServerInfoTextArea.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.ServerInfoTextArea.Dock = System.Windows.Forms.DockStyle.Fill;
this.ServerInfoTextArea.Font = new System.Drawing.Font("GulimChe", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.ServerInfoTextArea.ForeColor = System.Drawing.SystemColors.Info;
this.ServerInfoTextArea.Location = new System.Drawing.Point(0, 152);
this.ServerInfoTextArea.Name = "ServerInfoTextArea";
this.ServerInfoTextArea.ReadOnly = true;
this.ServerInfoTextArea.Size = new System.Drawing.Size(303, 197);
this.ServerInfoTextArea.TabIndex = 1;
this.ServerInfoTextArea.Text = "";
//
// splitter1
//
this.splitter1.Dock = System.Windows.Forms.DockStyle.Top;
this.splitter1.Location = new System.Drawing.Point(0, 147);
this.splitter1.Name = "splitter1";
this.splitter1.Size = new System.Drawing.Size(303, 5);
this.splitter1.TabIndex = 2;
this.splitter1.TabStop = false;
//
// clientInfoBox // clientInfoBox
// //
this.clientInfoBox.Dock = System.Windows.Forms.DockStyle.Top;
this.clientInfoBox.FormattingEnabled = true; this.clientInfoBox.FormattingEnabled = true;
this.clientInfoBox.Location = new System.Drawing.Point(3, 6); this.clientInfoBox.Location = new System.Drawing.Point(0, 0);
this.clientInfoBox.Name = "clientInfoBox"; this.clientInfoBox.Name = "clientInfoBox";
this.clientInfoBox.Size = new System.Drawing.Size(297, 342); this.clientInfoBox.Size = new System.Drawing.Size(303, 147);
this.clientInfoBox.TabIndex = 0; this.clientInfoBox.TabIndex = 0;
// //
// buttonStartGame
//
this.buttonStartGame.Location = new System.Drawing.Point(53, 195);
this.buttonStartGame.Name = "buttonStartGame";
this.buttonStartGame.Size = new System.Drawing.Size(75, 23);
this.buttonStartGame.TabIndex = 6;
this.buttonStartGame.Text = "Start game";
this.buttonStartGame.UseVisualStyleBackColor = true;
this.buttonStartGame.Click += new System.EventHandler(this.buttonStartGame_Click);
//
// nrOfClients
//
this.nrOfClients.Location = new System.Drawing.Point(78, 36);
this.nrOfClients.Maximum = new decimal(new int[] {
20,
0,
0,
0});
this.nrOfClients.Minimum = new decimal(new int[] {
2,
0,
0,
0});
this.nrOfClients.Name = "nrOfClients";
this.nrOfClients.Size = new System.Drawing.Size(39, 20);
this.nrOfClients.TabIndex = 7;
this.nrOfClients.Value = new decimal(new int[] {
2,
0,
0,
0});
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(8, 38);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(53, 13);
this.label1.TabIndex = 8;
this.label1.Text = "Client limit";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(8, 69);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(64, 13);
this.label2.TabIndex = 9;
this.label2.Text = "Game mode";
//
// gameModes
//
this.gameModes.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.gameModes.FormattingEnabled = true;
this.gameModes.Items.AddRange(new object[] {
"Free-for-all",
"Team death-match"});
this.gameModes.Location = new System.Drawing.Point(78, 66);
this.gameModes.Name = "gameModes";
this.gameModes.Size = new System.Drawing.Size(99, 21);
this.gameModes.TabIndex = 10;
//
// timeLimit
//
this.timeLimit.Location = new System.Drawing.Point(109, 94);
this.timeLimit.Minimum = new decimal(new int[] {
5,
0,
0,
0});
this.timeLimit.Name = "timeLimit";
this.timeLimit.Size = new System.Drawing.Size(68, 20);
this.timeLimit.TabIndex = 11;
this.timeLimit.ThousandsSeparator = true;
this.timeLimit.Value = new decimal(new int[] {
5,
0,
0,
0});
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(8, 96);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(95, 13);
this.label3.TabIndex = 9;
this.label3.Text = "Time limit (minutes)";
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(9, 15);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(57, 13);
this.label4.TabIndex = 8;
this.label4.Text = "Map name";
//
// mapName
//
this.mapName.Location = new System.Drawing.Point(78, 7);
this.mapName.Name = "mapName";
this.mapName.Size = new System.Drawing.Size(98, 20);
this.mapName.TabIndex = 12;
//
// Form1 // Form1
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -159,7 +315,11 @@
((System.ComponentModel.ISupportInitialize)(this.listenPort)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.listenPort)).EndInit();
this.panel_serverOptions.ResumeLayout(false); this.panel_serverOptions.ResumeLayout(false);
this.panel_serverOptions.PerformLayout(); this.panel_serverOptions.PerformLayout();
this.panel_commands.ResumeLayout(false);
this.panel_commands.PerformLayout();
this.panel_clientArea.ResumeLayout(false); this.panel_clientArea.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.nrOfClients)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.timeLimit)).EndInit();
this.ResumeLayout(false); this.ResumeLayout(false);
} }
@ -176,6 +336,17 @@
private System.Windows.Forms.Panel panel_commands; private System.Windows.Forms.Panel panel_commands;
private System.Windows.Forms.Panel panel_clientArea; private System.Windows.Forms.Panel panel_clientArea;
private System.Windows.Forms.ListBox clientInfoBox; private System.Windows.Forms.ListBox clientInfoBox;
private System.Windows.Forms.RichTextBox ServerInfoTextArea;
private System.Windows.Forms.Splitter splitter1;
private System.Windows.Forms.Button buttonStartGame;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.NumericUpDown nrOfClients;
private System.Windows.Forms.ComboBox gameModes;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.NumericUpDown timeLimit;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.TextBox mapName;
} }
} }

View File

@ -51,24 +51,51 @@ namespace StandAloneLauncher
this.serverName.Enabled = true; this.serverName.Enabled = true;
this.lanBroadcast.Enabled = true; this.lanBroadcast.Enabled = true;
this.serverToggle.Text = "Start server"; this.serverToggle.Text = "Start server";
this.ServerInfoTextArea.AppendText(DateTime.Now.ToUniversalTime() + "\n\t" + "Server terminated!\n");
this.panel_commands.Visible = false;
} }
else else
{ {
this.serverIsRunning = true;
ServerInitDesc desc = new ServerInitDesc(); ServerInitDesc desc = new ServerInitDesc();
desc.broadcast = this.lanBroadcast.Checked; //desc.mainOptions.broadcast = this.lanBroadcast.Checked;
desc.listenPort = (int)this.listenPort.Value; desc.mainOptions.listenPort = (int)this.listenPort.Value;
desc.serverName = this.serverName.Text; desc.mainOptions.serverName = this.serverName.Text;
if (this.gameServer.ServerInitiate(desc) == DanBiasServerReturn.DanBiasServerReturn_Sucess) if (this.gameServer.ServerInitiate(desc) == DanBiasServerReturn.DanBiasServerReturn_Sucess)
{ {
this.serverIsRunning = true;
GameServerInfo info = this.gameServer.ServerGetInfo();
this.Text = this.serverName.Text + " - " + info.serverIp;
this.listenPort.Enabled = false; this.listenPort.Enabled = false;
this.serverName.Enabled = false; this.serverName.Enabled = false;
this.lanBroadcast.Enabled = false; this.lanBroadcast.Enabled = false;
this.serverToggle.Text = "Stop server"; this.serverToggle.Text = "Stop server";
this.gameServer.ServerStart(); this.gameServer.ServerStart();
this.clientInfoBox.Items.Add((Object)"Server initiated!"); this.panel_commands.Visible = true;
} this.ServerInfoTextArea.AppendText(DateTime.Now.ToUniversalTime() + "\n\t" + "Server initiated!\n\tListening on port " + this.listenPort.Value.ToString() + "\n\tLocal IP: " + info.serverIp + "\n");
}
else
{
this.ServerInfoTextArea.AppendText(DateTime.Now.ToUniversalTime() + "\n\t" + "Failed to initiate the server!");
}
}
}
private void buttonStartGame_Click(object sender, EventArgs e)
{
//this.gameServer.GameSetGameMode(this.gameModes.SelectedText);
this.gameServer.GameSetGameTime((int)this.timeLimit.Value);
//this.gameServer.GameSetMapId(0);
this.gameServer.GameSetMaxClients((int)this.nrOfClients.Value);
if (!this.gameServer.GameStart())
{
this.ServerInfoTextArea.AppendText(DateTime.Now.ToUniversalTime() + "\n\t" + "Failed to start the game session!\n");
}
else
{
this.ServerInfoTextArea.AppendText(DateTime.Now.ToUniversalTime() + "\n\t" + "Game session started!\n");
} }
} }
} }