More work on server selection. Currently untested.

This commit is contained in:
lotodore
2009-04-05 12:31:12 +00:00
parent 59a6b35dd1
commit 534b6066a8
6 changed files with 90 additions and 5 deletions
+39 -4
View File
@@ -504,11 +504,12 @@ ClientStateReadingServerList::Process(ClientThread &client)
if (serverCount == 1)
{
client.UseServer(lastServerInfoId);
client.SetState(ClientStateStartResolve::Instance());
retVal = MSG_SOCK_SERVER_LIST_DONE;
}
else if (serverCount > 0)
else if (serverCount > 1)
{
// TODO....
client.SetState(ClientStateWaitChooseServer::Instance());
}
else
throw ClientException(__FILE__, __LINE__, ERR_SOCK_INVALID_SERVERLIST_XML, 0);
@@ -516,7 +517,41 @@ ClientStateReadingServerList::Process(ClientThread &client)
else
throw ClientException(__FILE__, __LINE__, ERR_SOCK_INVALID_SERVERLIST_XML, 0);
client.SetState(ClientStateStartResolve::Instance());
return retVal;
}
//-----------------------------------------------------------------------------
ClientStateWaitChooseServer &
ClientStateWaitChooseServer::Instance()
{
static ClientStateWaitChooseServer state;
return state;
}
ClientStateWaitChooseServer::ClientStateWaitChooseServer()
{
}
ClientStateWaitChooseServer::~ClientStateWaitChooseServer()
{
}
int
ClientStateWaitChooseServer::Process(ClientThread &client)
{
int retVal = MSG_SOCK_INTERNAL_PENDING;
unsigned serverId;
if (client.GetSelectedServer(serverid))
{
client.UseServer(serverid);
client.SetState(ClientStateStartResolve::Instance());
retVal = MSG_SOCK_SERVER_LIST_DONE;
}
else
Thread::Msleep(20);
return retVal;
}
@@ -1593,7 +1628,7 @@ ClientStateFinal::~ClientStateFinal()
int
ClientStateFinal::Process(ClientThread &/*client*/)
{
Thread::Msleep(10);
Thread::Msleep(20);
return MSG_SOCK_INTERNAL_PENDING;
}