home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Revista CD Expert 51
/
PCGamer51_17Demos.iso
/
games
/
CM
/
CyclingManagerDemoCangas.exe
/
CyclingManagerDemo
/
scripts
/
net
/
uci_server.cnc
< prev
next >
Wrap
Text File
|
2001-07-02
|
6KB
|
261 lines
// ******************************************************
// Network Callbacks
// *******************************************************
func void fnGameConnectCB(Net_Client pClient)
{
}
func void fnGameDisconnectCB(Net_Client _pClient)
{
NetClient_Destroy(_pClient);
}
// *********************
// incomming messages
// *********************
func void fnGameDistantLogin(szx szGameLogin,szx szGamePassword,szx szAdminLogin,szx szAdminPassword,i32x iGameMode)
{
// get client
var Net_Client pClient;
pClient = GetCurrentClient();
g_oGateway_MenuServerClient.m_pClient = pClient;
var i32x iGameId;
iGameId = 1;
pClient << mGame_LoginOK();
// init user
g_oUser.m_szGatewayAuthorization = "*OK*";
}
// *********************
// incomming messages
// *********************
func void fnGameReady(i32x _iPort)
{
print("game ready at ");println(itoa(_iPort));
// get client
var Net_Client pClient;
pClient = GetCurrentClient();
// store menu server adress
g_oMenuServer.m_szIP = "127.0.0.1";
g_oMenuServer.m_iPort = _iPort;
// If already connected
if(g_oLobby.m_oServer)
{
// disconnect from gateway to allow new login
NetClient_Disconnect(g_oLobby.m_oServer);
}
// admin is automatically connected
g_oLobby.m_oServer = NetClient_Create(g_oLobby.m_szIP, g_oLobby.m_iGamePort, GatewayInterface, fnGatewaySimpleConnectCB, fnGatewayDisconnectCB);
}
// user login
func void fnUserLogin( szx _szLogin )
{
print(">> User trying to login : ");
println(_szLogin);
var i32x iResult;
var Net_Client pClient;
var Net_ClientList pClientList;
var i32x iUserId;
var i32x iNewRow, iUserTable;
iResult = 1;
// get net client
pClient = GetCurrentClient();
// new login ?
if (iResult>0)
{
iUserId = Join_FindKeyFromStringData( g_oGatewayJoins.iUserName, _szLogin );
if (iUserId==-1)
{
// add user in table
iUserTable = Table_GetIndexFromName(QUERY_GAME_SERVERS,"Users");
iNewRow = Table_AddRow(QUERY_GAME_SERVERS,iUserTable);
Join_SetStringFromIndex(g_oGatewayJoins.iUserName,iNewRow,_szLogin);
iUserId = Join_GetIntFromIndex(g_oGatewayJoins.iUserId,iNewRow);
Table_Update(QUERY_GAME_SERVERS,iUserTable);
print("new user id:");println(itoa(iUserId));
}
else
{
print("old user id:");println(itoa(iUserId));
}
}
if (iResult)
{
// set user id
NetClient_SetId(pClient,iUserId);
// get client list
pClientList = NetServer_GetClientList(g_pGameServer,0);
// connected to gateway ?
if ((NetClientList_FindClient(pClientList,iUserId)!=g_poNullClient) || (Join_GetIntFromKey(g_oGatewayJoins.iUserGameId, iUserId)!=0))
{
// ** login duplicated
print("Already connected\n");
pClient << mUser_GatewayLoginDuplicated();
iResult = 0;
}
else
{
// ** login accepted
// add client in list
NetClientList_AddClient( pClientList, pClient);
// authorize client in menu server
g_oGateway_MenuServerClient.m_pClient << mGame_UserAuthorization(_szLogin, g_oUser.m_szGatewayAuthorization);
}
}
else
{
// ** login failed
print("Login Failed.\n");
pClient << mUser_GatewayLoginFailed();
NetClient_Disconnect(pClient);
}
}
func void fnGateway_UserAuthorizationOk(szx _szLogin,szx _szAuthorization)
{
if (strcmp(g_oUser.m_szLogin,_szLogin)==0)
{
// admin is automatically conected to the menu server
g_oMenuServer.m_oServer = NetClient_Create(
g_oMenuServer.m_szIP,
g_oMenuServer.m_iPort,
iClientLogin,
MenuServerConnectCB,
MenuServerDisconnectCB);
}
else
{
// get client list
var Net_ClientList pClientList;
var Net_Client pClient;
var i32x iUserId;
pClientList = NetServer_GetClientList(g_pGameServer,0);
iUserId = Join_FindKeyFromStringData(g_oGatewayJoins.iUserName, _szLogin);
if (iUserId>0)
{
// get net client
pClient = NetClientList_FindClient(pClientList,iUserId);
if (pClient)
{
pClient << mUser_GatewayAuthorizationOK(_szAuthorization,g_oMenuServer.m_szIP,g_oMenuServer.m_iPort);
}
else
{
print("## authorization ack but client not found ");
println(_szLogin);
}
}
}
}
func void fnUserConnection( szx _szLogin )
{
// activate connection
var i32x iUserId,iNumConnected;
iUserId = Join_FindKeyFromStringData(g_oGatewayJoins.iUserName, _szLogin);
if (iUserId>0)
{
Join_SetIntFromKey( g_oGatewayJoins.iUserGameId, iUserId, 1);
g_oGateway_MenuServerClient.m_iNumConnected = g_oGateway_MenuServerClient.m_iNumConnected + 1;
}
}
func void fnUserDisconnection( szx _szLogin )
{
// reset connection
var i32x iUserId,iNumConnected;
iUserId = Join_FindKeyFromStringData(g_oGatewayJoins.iUserName, _szLogin);
if (iUserId>0)
{
Join_SetIntFromKey( g_oGatewayJoins.iUserGameId, iUserId, 0);
g_oGateway_MenuServerClient.m_iNumConnected = g_oGateway_MenuServerClient.m_iNumConnected - 1;
if(g_oGateway_MenuServerClient.m_iNumConnected<0)
g_oGateway_MenuServerClient.m_iNumConnected = 0;
}
}
func void fnGateway_UserAuthorizationFailed_Null(szx _szLogin)
{
}
// *************************
// * Functions
// *************************
func void fnGameServer_Create()
{
// Launch server
g_oLobby.m_szIP = "127.0.0.1";
g_pGameServer = NetServer_Create( g_oLobby.m_iGamePort, GameInterface, fnGameConnectCB, fnGameDisconnectCB, 1 );
if (g_pGameServer)
{
// Read the server port
g_oLobby.m_iGamePort = NetServer_GetPort(g_pGameServer);
print(">> Game Server started on port ");
println(itoa(g_oLobby.m_iGamePort));
}
}
func void fnGameServer_Destroy()
{
if (g_pGameServer)
{
NetServer_Destroy(g_pGameServer);
g_pGameServer = g_pNullServer;
}
}