| 111 | } |
| 112 | |
| 113 | void nthread_start(BOOL set_turn_upper_bit) |
| 114 | { |
| 115 | const char *err, *err2; |
| 116 | DWORD largestMsgSize; |
| 117 | _SNETCAPS caps; |
| 118 | |
| 119 | last_tick = SDL_GetTicks(); |
| 120 | sgbPacketCountdown = 1; |
| 121 | sgbSyncCountdown = 1; |
| 122 | sgbTicsOutOfSync = TRUE; |
| 123 | if (set_turn_upper_bit) |
| 124 | nthread_set_turn_upper_bit(); |
| 125 | else |
| 126 | turn_upper_bit = 0; |
| 127 | caps.size = 36; |
| 128 | if (!SNetGetProviderCaps(&caps)) { |
| 129 | err = TraceLastError(); |
| 130 | app_fatal("SNetGetProviderCaps:\n%s", err); |
| 131 | } |
| 132 | gdwTurnsInTransit = caps.defaultturnsintransit; |
| 133 | if (!caps.defaultturnsintransit) |
| 134 | gdwTurnsInTransit = 1; |
| 135 | if (caps.defaultturnssec <= 20 && caps.defaultturnssec) |
| 136 | sgbNetUpdateRate = 20 / caps.defaultturnssec; |
| 137 | else |
| 138 | sgbNetUpdateRate = 1; |
| 139 | largestMsgSize = 512; |
| 140 | if (caps.maxmessagesize < 0x200) |
| 141 | largestMsgSize = caps.maxmessagesize; |
| 142 | gdwDeltaBytesSec = caps.bytessec >> 2; |
| 143 | gdwLargestMsgSize = largestMsgSize; |
| 144 | gdwNormalMsgSize = caps.bytessec * sgbNetUpdateRate / 20; |
| 145 | gdwNormalMsgSize *= 3; |
| 146 | gdwNormalMsgSize >>= 2; |
| 147 | if (caps.maxplayers > MAX_PLRS) |
| 148 | caps.maxplayers = MAX_PLRS; |
| 149 | gdwNormalMsgSize /= caps.maxplayers; |
| 150 | while (gdwNormalMsgSize < 0x80) { |
| 151 | gdwNormalMsgSize *= 2; |
| 152 | sgbNetUpdateRate *= 2; |
| 153 | } |
| 154 | if (gdwNormalMsgSize > largestMsgSize) |
| 155 | gdwNormalMsgSize = largestMsgSize; |
| 156 | if (gbMaxPlayers > 1) { |
| 157 | sgbThreadIsRunning = FALSE; |
| 158 | sgMemCrit.Enter(); |
| 159 | nthread_should_run = TRUE; |
| 160 | sghThread = CreateThread(nthread_handler, &glpNThreadId); |
| 161 | if (sghThread == NULL) { |
| 162 | err2 = TraceLastError(); |
| 163 | app_fatal("nthread2:\n%s", err2); |
| 164 | } |
| 165 | } |
| 166 | } |
| 167 | |
| 168 | unsigned int nthread_handler(void *) |
| 169 | { |
no test coverage detected