home *** CD-ROM | disk | FTP | other *** search
/ Revista CD Expert 51 / PCGamer51_17Demos.iso / games / CM / CyclingManagerDemoCangas.exe / CyclingManagerDemo / MenuServer / Subscribe.cnc < prev    next >
Text File  |  2001-07-02  |  8KB  |  286 lines

  1. // Subscribe user
  2. func void fnSubscribeUser(i32x iGuestID,i32x _iTeamID)
  3. {
  4.     var Net_Client pUser;
  5.     var Net_ClientList pClientList;
  6.     var i32x iUserID,iManagerID;
  7.     var szx szLogin;
  8.     
  9.     
  10.     // Find client in GuestClient list
  11.     pClientList = NetServer_GetClientList( g_pServer, G_iGuestClientList);
  12.     pUser = NetClientList_FindClient(pClientList,-iGuestID);
  13.  
  14.     // get login
  15.     szLogin = Join_GetStringFromKey(g_stJoins.m_iUser_GuestLogin,iGuestID);
  16.     
  17.     // Find manager of team
  18.     iManagerID = Join_GetIntFromKey(g_stJoins.m_iTeam_ManagerId,_iTeamID);
  19.     
  20.     // Find unactive user in GAM_user
  21.     iUserID = Join_FindKeyFromIntData(g_stJoins.m_iUser_iActive,0);
  22.     if(iUserID>0)
  23.     {
  24.         var szx szAuthorization;
  25.         var i32x iDivision;
  26.         // User is now active
  27.         Join_SetIntFromKey(g_stJoins.m_iUser_iActive,iUserID,1);
  28.         
  29.         // Set user data
  30.         Join_SetStringFromKey(g_stJoins.m_iUser_szLogin,iUserID,szLogin);
  31.         Join_SetStringFromKey(g_stJoins.m_iUser_szPseudo,iUserID,szLogin);
  32.         
  33.         // Set manager User ID (1 to 1 relation)
  34.         Join_SetIntFromKey(g_stJoins.m_iUser_ManagerId,iUserID,iManagerID);    
  35.         Join_SetIntFromKey(g_stJoins.m_iManager_UserId,iManagerID,iUserID);
  36.         
  37.         // Get division
  38.         iDivision = Join_GetIntFromKey(g_stJoins.m_iUser_DivisionId, iUserID)-1;
  39.         
  40.         // Retrieve authorization from GAM_guestuser
  41.         szAuthorization = Join_GetStringFromKey(g_stJoins.m_iUser_GuestPassword,iGuestID);
  42.         
  43.         // Guest is registered (slot is locked by login for unsubscribe)
  44.         Join_SetIntFromKey(g_stJoins.m_iUser_GuestFree,iGuestID,g_iGUEST_STATUS_User);
  45.         
  46.         //Add the new client
  47.         Join_SetStringFromKey( g_stJoins.m_iUser_szPassword, iUserID, szAuthorization);
  48.         
  49.         
  50.         if(pUser)
  51.         {
  52.             // Change client identifier to UserID
  53.             NetClient_SetId(pUser,iUserID);
  54.             Join_SetIntFromKey(    g_stJoins.m_iUser_iConnected, iUserID, 1);
  55.  
  56.             // Add it to division list
  57.             pClientList = NetServer_GetClientList( g_pServer, iDivision);
  58.             NetClientList_AddClient( pClientList, pUser);
  59.             // inrace ?
  60.             if(g_stVirtualDay.m_iActivePhase == G_iPhase_InRace)
  61.             {
  62.                 var i32x iPreRaceTeamId;
  63.                 iPreRaceTeamId = GetPreRaceIDFromTeamID(_iTeamID);
  64.                 Join_SetIntFromKey(g_stJoins.m_iUser_iPreRaceTeamId, iUserID, iPreRaceTeamId);
  65.                 g_a_stPreRaceClientDivisions[iDivision].a_Clients[iPreRaceTeamId] = pUser;
  66.             }
  67.             
  68.             
  69.             // inform client
  70.             pUser << mUser_GameSubscribeOK (szAuthorization,iManagerID,_iTeamID);
  71.             pUser << mUser_GameConfig(GetMode(),GetCalendarMode(),0,IsGameModeEnded());
  72.             
  73.             if(g_stVirtualDay.m_iActivePhase == G_iPhase_Management)
  74.             {
  75.                 NetClient_SetInterface(pUser,iManagement);
  76.             }
  77.             if(g_stVirtualDay.m_iActivePhase == G_iPhase_PreRace)
  78.             {
  79.                 NetClient_SetInterface(pUser,iPreRace);
  80.             }
  81.             if(g_stVirtualDay.m_iActivePhase == G_iPhase_InRace)
  82.             {
  83.                 NetClient_SetInterface(pUser,iInRace);
  84.                 
  85.                 // Client connected while in race
  86.                 // Add game client to Game Server
  87.                 var i32x iPreRaceTeamId;
  88.                 var szx szIP;
  89.                 if(GetGameServerState(iDivision)==1)
  90.                 {
  91.                     iPreRaceTeamId = GetPreRaceIDFromTeamID(_iTeamID);
  92.                     if(iPreRaceTeamId == -1)
  93.                     {
  94.                         print("Team ID ");
  95.                         print(itoa(_iTeamID));
  96.                         print(" not in race !\n");
  97.                     }
  98.                     else
  99.                     {
  100.                         print("Adding client to resolution server.\n");
  101.                         AddPassword(iDivision,szAuthorization,iPreRaceTeamId);
  102.                         pUser << mUser_InRaceServer (GetGameServerPort(iDivision));
  103.                         pUser << mUser_InRaceStart(iPreRaceTeamId);
  104.                     }
  105.                 }
  106.             }
  107.             // Then Remove client from guest list
  108.             pClientList = NetServer_GetClientList( g_pServer, G_iGuestClientList);
  109.             NetClientList_DelClient( pClientList, pUser, 0);
  110.         }
  111.         
  112.         
  113.         // notify clients
  114.         NotifySubscribe( iGuestID,iUserID,iManagerID, iDivision);
  115.  
  116.         println("Successfull Subscription.");
  117.     }
  118.     else
  119.     {
  120.         println("Database problem : not enough user slot in GAM_user ?");
  121.         println("It must be equal to team number !");
  122.     }
  123.     
  124. }
  125.  
  126.  
  127. // unsubscribe user
  128. func void fnUnsubscribeUser(i32x iUserID)
  129. {
  130.     var Net_Client pClient;
  131.     var Net_ClientList pClientList;
  132.     var i32x iDivision,iGuestID,iManagerID;
  133.     var szx szLogin;
  134.     
  135.     // get User info
  136.     szLogin = Join_GetStringFromKey(g_stJoins.m_iUser_szLogin,iUserID);
  137.     iManagerID = Join_GetIntFromKey(g_stJoins.m_iUser_ManagerId,iUserID);
  138.     iDivision = Join_GetIntFromKey(g_stJoins.m_iUser_DivisionId,iUserID)-1;
  139.  
  140.     if ((iDivision<0)||(iDivision>G_iNumDivision))
  141.     {
  142.         print("## Wrong division : ");println(itoa(iDivision));
  143.         print("user id : ");println(itoa(iUserID));
  144.     }
  145.         
  146.     
  147.     // User is no more active
  148.     Join_SetIntFromKey(g_stJoins.m_iUser_iActive,iUserID,0);
  149.     
  150.     // Raz user data
  151.     Join_SetStringFromKey(g_stJoins.m_iUser_szLogin,iUserID,"0");
  152.     Join_SetStringFromKey(g_stJoins.m_iUser_szPseudo,iUserID,"0");
  153.     
  154.     // Raz manager User ID (1 to 1 relation) this free the team
  155.     Join_SetIntFromKey(g_stJoins.m_iUser_ManagerId,iUserID,0);    
  156.     Join_SetIntFromKey(g_stJoins.m_iManager_UserId,iManagerID,0);
  157.     
  158.     // Find guest slot
  159.     iGuestID = Join_FindKeyFromStringData(g_stJoins.m_iUser_GuestLogin,szLogin);
  160.     if(iGuestID < 0)
  161.     {
  162.         print("## No free slot : ");
  163.         println(szLogin);
  164.     }
  165.  
  166.     // connected user
  167.     pClientList = NetServer_GetClientList( g_pServer, iDivision);
  168.     pClient = NetClientList_FindClient(pClientList,iUserID);
  169.     if(pClient)
  170.     {
  171.         // guest becomes connected
  172.         Join_SetIntFromKey(g_stJoins.m_iUser_GuestFree,iGuestID,g_iGUEST_STATUS_Guest);
  173.         
  174.         // Okay for guest connection
  175.         print(szLogin);
  176.         print(" reconnected with Guest ID : ");println(itoa(iGuestID));
  177.         
  178.         // Guest identifier are negative
  179.         // Set client identifier to -guest id
  180.         NetClient_SetId(pClient,-iGuestID);
  181.         
  182.         // Remove client from registered list
  183.         pClientList = NetServer_GetClientList( g_pServer, iDivision);
  184.         NetClientList_DelClient( pClientList, pClient, 0);
  185.         
  186.         // Then add it to the menuserver guest client list
  187.         pClientList = NetServer_GetClientList( g_pServer, G_iGuestClientList);
  188.         NetClientList_AddClient( pClientList, pClient);
  189.         
  190.         // Set client to guest interface
  191.         NetClient_SetInterface(pClient,iGuestInterface);
  192.         
  193.         // Inform client
  194.         pClient << mUser_GameUnsubscribeOK(iGuestID);
  195.     }
  196.     else
  197.     {
  198.         // guest becomes unconnected
  199.         Join_SetIntFromKey(g_stJoins.m_iUser_GuestFree,iGuestID,g_iGUEST_STATUS_Free);
  200.     }
  201.     
  202.     NotifyUnsubscribe( iGuestID,iUserID,iManagerID, iDivision);
  203.     println("Successfull Unsubscription.");
  204. }
  205.  
  206.  
  207. func void NotifySubscribe(i32x iGuestId,i32x iUserID,i32x iManagerID, i32x iDivision)
  208. {
  209.     var i32x i, iNumClients;
  210.     var Net_ClientList pClientList;
  211.     var Net_Client pClient;
  212.  
  213.     // notify registered users
  214.     pClientList = NetServer_GetClientList( g_pServer, iDivision);
  215.     iNumClients = NetClientList_GetSize(pClientList);
  216.  
  217.     i = 0;
  218.     while (i<iNumClients)
  219.     {
  220.         pClient = NetClientList_GetClient(pClientList,i);
  221.         pClient << mUser_NotifySubscribe(iGuestId,iUserID, iManagerID);
  222.         i=i+1;
  223.     }
  224.  
  225.     // notify guests
  226.     pClientList = NetServer_GetClientList( g_pServer, G_iGuestClientList);
  227.     iNumClients = NetClientList_GetSize(pClientList);
  228.  
  229.     i = 0;
  230.     while (i<iNumClients)
  231.     {
  232.         pClient = NetClientList_GetClient(pClientList,i);
  233.         pClient << mUser_NotifySubscribe(iGuestId,iUserID, iManagerID);
  234.         i=i+1;
  235.     }
  236. }
  237.  
  238. func void NotifyUnsubscribe(i32x iGuestId,i32x iUserID,i32x iManagerID, i32x iDivision)
  239. {
  240.     var i32x i, iNumClients;
  241.     var Net_ClientList pClientList;
  242.     var Net_Client pClient;
  243.  
  244.     // notify users
  245.     pClientList = NetServer_GetClientList( g_pServer, iDivision);
  246.     iNumClients = NetClientList_GetSize(pClientList);
  247.  
  248.     i = 0;
  249.     while (i<iNumClients)
  250.     {
  251.         pClient = NetClientList_GetClient(pClientList,i);
  252.         pClient << mUser_NotifyUnsubscribe(iGuestId,iUserID,iManagerID);
  253.         i=i+1;
  254.     }
  255.  
  256.     // notify guests
  257.     pClientList = NetServer_GetClientList( g_pServer, G_iGuestClientList);
  258.     iNumClients = NetClientList_GetSize(pClientList);
  259.  
  260.     i = 0;
  261.     while (i<iNumClients)
  262.     {
  263.         pClient = NetClientList_GetClient(pClientList,i);
  264.         pClient << mUser_NotifyUnsubscribe(iGuestId,iUserID,iManagerID);
  265.         i=i+1;
  266.     }
  267. }
  268.  
  269. // unsubscribe all users
  270. func void fnUnsubscribeAll()
  271. {
  272.     var i32x i;
  273.     var i32x iNumUsers, iUserID;
  274.     i = 0;
  275.     iNumUsers = Join_GetNumRows(g_stJoins.m_iUser_iID);
  276.     while (i<iNumUsers)
  277.     {
  278.         if (Join_GetIntFromIndex(g_stJoins.m_iUser_iActive,i))
  279.         {
  280.             iUserID = Join_GetIntFromIndex(g_stJoins.m_iUser_iID, i);
  281.             fnUnsubscribeUser(iUserID);
  282.         }
  283.         i = i+1;
  284.     }
  285. }
  286.