home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Revista CD Expert 51
/
PCGamer51_17Demos.iso
/
games
/
CM
/
CyclingManagerDemoCangas.exe
/
CyclingManagerDemo
/
MenuServer
/
Subscribe.cnc
< prev
next >
Wrap
Text File
|
2001-07-02
|
8KB
|
286 lines
// Subscribe user
func void fnSubscribeUser(i32x iGuestID,i32x _iTeamID)
{
var Net_Client pUser;
var Net_ClientList pClientList;
var i32x iUserID,iManagerID;
var szx szLogin;
// Find client in GuestClient list
pClientList = NetServer_GetClientList( g_pServer, G_iGuestClientList);
pUser = NetClientList_FindClient(pClientList,-iGuestID);
// get login
szLogin = Join_GetStringFromKey(g_stJoins.m_iUser_GuestLogin,iGuestID);
// Find manager of team
iManagerID = Join_GetIntFromKey(g_stJoins.m_iTeam_ManagerId,_iTeamID);
// Find unactive user in GAM_user
iUserID = Join_FindKeyFromIntData(g_stJoins.m_iUser_iActive,0);
if(iUserID>0)
{
var szx szAuthorization;
var i32x iDivision;
// User is now active
Join_SetIntFromKey(g_stJoins.m_iUser_iActive,iUserID,1);
// Set user data
Join_SetStringFromKey(g_stJoins.m_iUser_szLogin,iUserID,szLogin);
Join_SetStringFromKey(g_stJoins.m_iUser_szPseudo,iUserID,szLogin);
// Set manager User ID (1 to 1 relation)
Join_SetIntFromKey(g_stJoins.m_iUser_ManagerId,iUserID,iManagerID);
Join_SetIntFromKey(g_stJoins.m_iManager_UserId,iManagerID,iUserID);
// Get division
iDivision = Join_GetIntFromKey(g_stJoins.m_iUser_DivisionId, iUserID)-1;
// Retrieve authorization from GAM_guestuser
szAuthorization = Join_GetStringFromKey(g_stJoins.m_iUser_GuestPassword,iGuestID);
// Guest is registered (slot is locked by login for unsubscribe)
Join_SetIntFromKey(g_stJoins.m_iUser_GuestFree,iGuestID,g_iGUEST_STATUS_User);
//Add the new client
Join_SetStringFromKey( g_stJoins.m_iUser_szPassword, iUserID, szAuthorization);
if(pUser)
{
// Change client identifier to UserID
NetClient_SetId(pUser,iUserID);
Join_SetIntFromKey( g_stJoins.m_iUser_iConnected, iUserID, 1);
// Add it to division list
pClientList = NetServer_GetClientList( g_pServer, iDivision);
NetClientList_AddClient( pClientList, pUser);
// inrace ?
if(g_stVirtualDay.m_iActivePhase == G_iPhase_InRace)
{
var i32x iPreRaceTeamId;
iPreRaceTeamId = GetPreRaceIDFromTeamID(_iTeamID);
Join_SetIntFromKey(g_stJoins.m_iUser_iPreRaceTeamId, iUserID, iPreRaceTeamId);
g_a_stPreRaceClientDivisions[iDivision].a_Clients[iPreRaceTeamId] = pUser;
}
// inform client
pUser << mUser_GameSubscribeOK (szAuthorization,iManagerID,_iTeamID);
pUser << mUser_GameConfig(GetMode(),GetCalendarMode(),0,IsGameModeEnded());
if(g_stVirtualDay.m_iActivePhase == G_iPhase_Management)
{
NetClient_SetInterface(pUser,iManagement);
}
if(g_stVirtualDay.m_iActivePhase == G_iPhase_PreRace)
{
NetClient_SetInterface(pUser,iPreRace);
}
if(g_stVirtualDay.m_iActivePhase == G_iPhase_InRace)
{
NetClient_SetInterface(pUser,iInRace);
// Client connected while in race
// Add game client to Game Server
var i32x iPreRaceTeamId;
var szx szIP;
if(GetGameServerState(iDivision)==1)
{
iPreRaceTeamId = GetPreRaceIDFromTeamID(_iTeamID);
if(iPreRaceTeamId == -1)
{
print("Team ID ");
print(itoa(_iTeamID));
print(" not in race !\n");
}
else
{
print("Adding client to resolution server.\n");
AddPassword(iDivision,szAuthorization,iPreRaceTeamId);
pUser << mUser_InRaceServer (GetGameServerPort(iDivision));
pUser << mUser_InRaceStart(iPreRaceTeamId);
}
}
}
// Then Remove client from guest list
pClientList = NetServer_GetClientList( g_pServer, G_iGuestClientList);
NetClientList_DelClient( pClientList, pUser, 0);
}
// notify clients
NotifySubscribe( iGuestID,iUserID,iManagerID, iDivision);
println("Successfull Subscription.");
}
else
{
println("Database problem : not enough user slot in GAM_user ?");
println("It must be equal to team number !");
}
}
// unsubscribe user
func void fnUnsubscribeUser(i32x iUserID)
{
var Net_Client pClient;
var Net_ClientList pClientList;
var i32x iDivision,iGuestID,iManagerID;
var szx szLogin;
// get User info
szLogin = Join_GetStringFromKey(g_stJoins.m_iUser_szLogin,iUserID);
iManagerID = Join_GetIntFromKey(g_stJoins.m_iUser_ManagerId,iUserID);
iDivision = Join_GetIntFromKey(g_stJoins.m_iUser_DivisionId,iUserID)-1;
if ((iDivision<0)||(iDivision>G_iNumDivision))
{
print("## Wrong division : ");println(itoa(iDivision));
print("user id : ");println(itoa(iUserID));
}
// User is no more active
Join_SetIntFromKey(g_stJoins.m_iUser_iActive,iUserID,0);
// Raz user data
Join_SetStringFromKey(g_stJoins.m_iUser_szLogin,iUserID,"0");
Join_SetStringFromKey(g_stJoins.m_iUser_szPseudo,iUserID,"0");
// Raz manager User ID (1 to 1 relation) this free the team
Join_SetIntFromKey(g_stJoins.m_iUser_ManagerId,iUserID,0);
Join_SetIntFromKey(g_stJoins.m_iManager_UserId,iManagerID,0);
// Find guest slot
iGuestID = Join_FindKeyFromStringData(g_stJoins.m_iUser_GuestLogin,szLogin);
if(iGuestID < 0)
{
print("## No free slot : ");
println(szLogin);
}
// connected user
pClientList = NetServer_GetClientList( g_pServer, iDivision);
pClient = NetClientList_FindClient(pClientList,iUserID);
if(pClient)
{
// guest becomes connected
Join_SetIntFromKey(g_stJoins.m_iUser_GuestFree,iGuestID,g_iGUEST_STATUS_Guest);
// Okay for guest connection
print(szLogin);
print(" reconnected with Guest ID : ");println(itoa(iGuestID));
// Guest identifier are negative
// Set client identifier to -guest id
NetClient_SetId(pClient,-iGuestID);
// Remove client from registered list
pClientList = NetServer_GetClientList( g_pServer, iDivision);
NetClientList_DelClient( pClientList, pClient, 0);
// Then add it to the menuserver guest client list
pClientList = NetServer_GetClientList( g_pServer, G_iGuestClientList);
NetClientList_AddClient( pClientList, pClient);
// Set client to guest interface
NetClient_SetInterface(pClient,iGuestInterface);
// Inform client
pClient << mUser_GameUnsubscribeOK(iGuestID);
}
else
{
// guest becomes unconnected
Join_SetIntFromKey(g_stJoins.m_iUser_GuestFree,iGuestID,g_iGUEST_STATUS_Free);
}
NotifyUnsubscribe( iGuestID,iUserID,iManagerID, iDivision);
println("Successfull Unsubscription.");
}
func void NotifySubscribe(i32x iGuestId,i32x iUserID,i32x iManagerID, i32x iDivision)
{
var i32x i, iNumClients;
var Net_ClientList pClientList;
var Net_Client pClient;
// notify registered users
pClientList = NetServer_GetClientList( g_pServer, iDivision);
iNumClients = NetClientList_GetSize(pClientList);
i = 0;
while (i<iNumClients)
{
pClient = NetClientList_GetClient(pClientList,i);
pClient << mUser_NotifySubscribe(iGuestId,iUserID, iManagerID);
i=i+1;
}
// notify guests
pClientList = NetServer_GetClientList( g_pServer, G_iGuestClientList);
iNumClients = NetClientList_GetSize(pClientList);
i = 0;
while (i<iNumClients)
{
pClient = NetClientList_GetClient(pClientList,i);
pClient << mUser_NotifySubscribe(iGuestId,iUserID, iManagerID);
i=i+1;
}
}
func void NotifyUnsubscribe(i32x iGuestId,i32x iUserID,i32x iManagerID, i32x iDivision)
{
var i32x i, iNumClients;
var Net_ClientList pClientList;
var Net_Client pClient;
// notify users
pClientList = NetServer_GetClientList( g_pServer, iDivision);
iNumClients = NetClientList_GetSize(pClientList);
i = 0;
while (i<iNumClients)
{
pClient = NetClientList_GetClient(pClientList,i);
pClient << mUser_NotifyUnsubscribe(iGuestId,iUserID,iManagerID);
i=i+1;
}
// notify guests
pClientList = NetServer_GetClientList( g_pServer, G_iGuestClientList);
iNumClients = NetClientList_GetSize(pClientList);
i = 0;
while (i<iNumClients)
{
pClient = NetClientList_GetClient(pClientList,i);
pClient << mUser_NotifyUnsubscribe(iGuestId,iUserID,iManagerID);
i=i+1;
}
}
// unsubscribe all users
func void fnUnsubscribeAll()
{
var i32x i;
var i32x iNumUsers, iUserID;
i = 0;
iNumUsers = Join_GetNumRows(g_stJoins.m_iUser_iID);
while (i<iNumUsers)
{
if (Join_GetIntFromIndex(g_stJoins.m_iUser_iActive,i))
{
iUserID = Join_GetIntFromIndex(g_stJoins.m_iUser_iID, i);
fnUnsubscribeUser(iUserID);
}
i = i+1;
}
}