home *** CD-ROM | disk | FTP | other *** search
/ Game Level Design / GLDesign.bin / Software / UnrealEngine2Runtime / UE2Runtime-22262001_Demo.exe / IpDrv / Classes / ClientBeaconReceiver.uc < prev    next >
Text File  |  2003-10-22  |  2KB  |  116 lines

  1. //=============================================================================
  2. // ClientBeaconReceiver: Receives LAN beacons from servers.
  3. //=============================================================================
  4. class ClientBeaconReceiver extends UdpBeacon
  5.     transient;
  6.  
  7. var struct BeaconInfo
  8. {
  9.     var IpAddr      Addr;
  10.     var float       Time;
  11.     var string      Text;
  12. } Beacons[32];
  13.  
  14. function int GetBeaconCount()
  15. {
  16.     return (ArrayCount (Beacons));
  17. }
  18.  
  19. function string GetBeaconAddress( int i )
  20. {
  21.     return IpAddrToString(Beacons[i].Addr);
  22. }
  23.  
  24. function string GetBeaconText(int i)
  25. {
  26.     return Beacons[i].Text;
  27. }
  28.  
  29. function BeginPlay()
  30. {
  31.     if( BindPort( BeaconPort, true ) > 0 )
  32.         SetTimer( 1.0, true );
  33.     else
  34.         warn( "ClientBeaconReceiver failed: Beacon port in use." );
  35. }
  36.  
  37. function Timer()
  38. {
  39.     local int i, j;
  40.  
  41.     // Remove any stale beacons and compress the list
  42.  
  43.     j = 0;
  44.  
  45.     for (i = 0; i < ArrayCount(Beacons); i++)
  46.     {
  47.         if (Beacons[i].Addr.Addr == 0)
  48.             continue;
  49.         
  50.         if (Level.TimeSeconds - Beacons[i].Time >= BeaconTimeout)
  51.             continue;
  52.  
  53.         if (i != j)
  54.             Beacons[j] = Beacons[i];
  55.  
  56.         j++;
  57.     }
  58.  
  59.     while (j < ArrayCount(Beacons))
  60.     {
  61.         Beacons[j].Addr.Addr = 0;
  62.         Beacons[j].Text = "";
  63.         j++;
  64.     }
  65.  
  66.     BroadcastQuery();
  67. }
  68.  
  69. function BroadcastQuery ()
  70. {
  71.     local IpAddr Addr;
  72.  
  73.     Addr.Addr = BroadcastAddr;
  74.     Addr.Port = ServerBeaconPort;
  75.  
  76.     SendText( Addr, "REPORT" );    
  77. }
  78.  
  79. event ReceivedText (IpAddr Addr, string Text)
  80. {
  81.     local int i, n;
  82.     local String Product;
  83.  
  84.     n = Len (BeaconProduct);
  85.  
  86.     Product = Left (Text, n + 1);
  87.  
  88.     if (!(Product ~= (BeaconProduct$" ")))
  89.         return;
  90.  
  91.     Text = Mid (Text, n + 1);
  92.  
  93.     Addr.Port = int (Text);
  94.  
  95.     for (i = 0; i < ArrayCount(Beacons); i++)
  96.         if (Beacons[i].Addr == Addr)
  97.             break;
  98.  
  99.     if (i == ArrayCount(Beacons))
  100.         for (i = 0; i< ArrayCount(Beacons); i++)
  101.             if (Beacons[i].Addr.Addr == 0)
  102.                 break;
  103.  
  104.     if (i == ArrayCount(Beacons))
  105.         return;
  106.  
  107.     Beacons[i].Addr = Addr;
  108.     Beacons[i].Time = Level.TimeSeconds;
  109.     Beacons[i].Text = Mid (Text, InStr (Text, " ") + 1);
  110. }
  111.  
  112. defaultproperties
  113. {
  114. }
  115.  
  116.