Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.65 KB | None | 0 0
  1. void serverslice(bool dedicated, uint timeout)   // main server update, called from main loop in sp, or from below in dedicated server
  2. {
  3.     if(!serverhost)
  4.     {
  5.         server::serverupdate();
  6.         server::sendpackets();
  7.         return;
  8.     }
  9.  
  10.     // below is network only
  11.  
  12.     if(dedicated)
  13.     {
  14.         int millis = (int)enet_time_get();
  15.         elapsedtime = millis - totalmillis;
  16.         static int timeerr = 0;
  17.         int scaledtime = server::scaletime(elapsedtime) + timeerr;
  18.         curtime = scaledtime/100;
  19.         timeerr = scaledtime%100;
  20.         if(server::ispaused()) curtime = 0;
  21.         lastmillis += curtime;
  22.         totalmillis = millis;
  23.         updatetime();
  24.     }
  25.     server::serverupdate();
  26.  
  27.     flushmasteroutput();
  28.     checkserversockets();
  29.  
  30.     if(!lastupdatemaster || totalmillis-lastupdatemaster>60*60*1000)       // send alive signal to masterserver every hour of uptime
  31.         updatemasterserver();
  32.  
  33.     if(totalmillis-laststatus>60*1000)   // display bandwidth stats, useful for server ops
  34.     {
  35.         laststatus = totalmillis;
  36.         if(nonlocalclients || serverhost->totalSentData || serverhost->totalReceivedData) logoutf("status: %d remote clients, %.1f send, %.1f rec (K/sec)", nonlocalclients, serverhost->totalSentData/60.0f/1024, serverhost->totalReceivedData/60.0f/1024);
  37.         serverhost->totalSentData = serverhost->totalReceivedData = 0;
  38.     }
  39.  
  40.     ENetEvent event;
  41.     bool serviced = false;
  42.     while(!serviced)
  43.     {
  44.         if(enet_host_check_events(serverhost, &event) <= 0)
  45.         {
  46.             if(enet_host_service(serverhost, &event, timeout) <= 0) break;
  47.             serviced = true;
  48.         }
  49.         switch(event.type)
  50.         {
  51.             case ENET_EVENT_TYPE_CONNECT:
  52.             {
  53.                 client &c = addclient(ST_TCPIP);
  54.                 c.peer = event.peer;
  55.                 c.peer->data = &c;
  56.                 cubestr hn;
  57.                 copycubestr(c.hostname, (enet_address_get_host_ip(&c.peer->address, hn, sizeof(hn))==0) ? hn : "unknown");
  58.                 logoutf("client connected (%s)", c.hostname);
  59.                 int reason = server::clientconnect(c.num, c.peer->address.host);
  60.                 if(reason) disconnect_client(c.num, reason);
  61.                 break;
  62.             }
  63.             case ENET_EVENT_TYPE_RECEIVE:
  64.             {
  65.                 client *c = (client *)event.peer->data;
  66.                 if(c) process(event.packet, c->num, event.channelID);
  67.                 if(event.packet->referenceCount==0) enet_packet_destroy(event.packet);
  68.                 break;
  69.             }
  70.             case ENET_EVENT_TYPE_DISCONNECT:
  71.             {
  72.                 client *c = (client *)event.peer->data;
  73.                 if(!c) break;
  74.                 logoutf("disconnected client (%s)", c->hostname);
  75.                 server::clientdisconnect(c->num);
  76.                 delclient(c);
  77.                 break;
  78.             }
  79.             default:
  80.                 break;
  81.         }
  82.     }
  83.     if(server::sendpackets()) enet_host_flush(serverhost);
  84. }
  85.  
  86. void flushserver(bool force)
  87. {
  88.     if(server::sendpackets(force) && serverhost) enet_host_flush(serverhost);
  89. }
  90.  
  91. #ifndef STANDALONE
  92. void localdisconnect(bool cleanup)
  93. {
  94.     bool disconnected = false;
  95.     loopv(clients) if(clients[i]->type==ST_LOCAL)
  96.     {
  97.         server::localdisconnect(i);
  98.         delclient(clients[i]);
  99.         disconnected = true;
  100.     }
  101.     if(!disconnected) return;
  102.     game::gamedisconnect(cleanup);
  103.     mainmenu = 1;
  104. }
  105.  
  106. void localconnect()
  107. {
  108.     client &c = addclient(ST_LOCAL);
  109.     copycubestr(c.hostname, "local");
  110.     game::gameconnect(false);
  111.     server::localconnect(c.num);
  112. }
  113. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement