Changeset 584
- Timestamp:
- 05/30/08 10:05:41 (7 months ago)
- Files:
-
- trunk/src/defend/game/Game.d (modified) (1 diff)
- trunk/src/defend/game/net/Server.d (modified) (5 diffs)
- trunk/src/defend/mp/Gateway.d (modified) (3 diffs)
- trunk/src/defend/mp/PlayerManager.d (modified) (2 diffs)
- trunk/src/defend/mp/Types.d (modified) (1 diff)
- trunk/src/defend/sim/Core.d (modified) (4 diffs)
- trunk/src/engine/util/Log.d (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/defend/game/Game.d
r583 r584 8 8 9 9 import engine.core.TaskManager; 10 import engine.math.Vector; 10 11 import engine.input.Input; 11 12 import engine.rend.Renderer; trunk/src/defend/game/net/Server.d
r583 r584 56 56 // Sync checks 57 57 Queue!(SyncCheckInfo) syncChecks; 58 Mutex syncCheckMutex; 58 59 59 60 // Update thread … … 280 281 void onSyncCheck(MessageSyncCheck* message) 281 282 { 282 synchronized 283 synchronized(syncCheckMutex) 283 284 syncChecks.push(message.info); 284 285 285 debug(networking)286 logger. info("check({}:{}): {}",286 version(none) debug(networking) 287 logger.spam("check({}:{}): {}", 287 288 message.info.file, message.info.line, 288 289 message.info.number); … … 312 313 313 314 syncChecks.create(2000); 315 syncCheckMutex = new Mutex; 314 316 315 317 logger = Log.getLogger("server.client.handler." ~ Integer.toString(id)); … … 578 580 } 579 581 582 // Check for out of sync 583 void compareSyncChecks() 584 { 585 if(cm.numberClients == 1) 586 return; 587 588 foreach(client; cm) 589 client.syncCheckMutex.lock(); 590 591 scope(exit) 592 { 593 foreach(client; cm) 594 client.syncCheckMutex.unlock(); 595 } 596 597 ClientHandler firstClient; 598 599 foreach(client; cm) 600 { 601 firstClient = client; 602 break; 603 } 604 605 while(firstClient.syncChecks.count) 606 { 607 SyncCheckInfo info; 608 609 { 610 info = firstClient.syncChecks.top(); 611 612 if(info.phase > minPhase) 613 break; 614 615 firstClient.syncChecks.pop(); 616 } 617 618 foreach(client; cm) 619 { 620 if(client is firstClient) 621 continue; 622 623 auto check = client.syncChecks.pop(); 624 625 if(check.phase != info.phase || 626 check.line != info.line || 627 check.number != info.number) 628 { 629 logger.fatal("out of sync: {} vs. {}", check, info); 630 assert(false); 631 } 632 } 633 } 634 } 635 580 636 // Calculates the number of simulation steps for a phase's length 581 637 ushort numberSimulationSteps(ushort length) … … 600 656 synchronized(phaseMutex) if(currentPhase - minPhase <= 2) 601 657 { 602 // TODO: Compare sync checks658 compareSyncChecks(); 603 659 604 660 int length; trunk/src/defend/mp/Gateway.d
r583 r584 1 1 module defend.mp.Gateway; 2 3 import tango.util.Convert; 2 4 3 5 import engine.math.Vector; … … 12 14 } 13 15 14 //debug = syncChecks;16 debug = syncChecks; 15 17 16 18 struct SyncCheckInfo … … 22 24 23 25 uint number; 26 27 char[] toString() 28 { 29 return "phase: " ~ to!(char[])(phase) ~ "; file: " ~ file ~ 30 "; line: " ~to!(char[])(line) ~ "; number: " ~ to!(char[])(number); 31 } 24 32 } 25 33 trunk/src/defend/mp/PlayerManager.d
r583 r584 35 35 players[info.id].info = info; 36 36 37 logger.info(" player list entry: {}", info);37 logger.info("new player: {}", info); 38 38 } 39 39 … … 42 42 logger.info("player {} disconnected", id); 43 43 44 assert(isPlayer(id), "player does not exist");44 assert(isPlayer(id), "player doesn't exist, though"); 45 45 players[id] = null; 46 46 } trunk/src/defend/mp/Types.d
r583 r584 1 1 module defend.mp.Types; 2 2 3 publicimport engine.math.Vector;3 import engine.math.Vector; 4 4 5 5 alias ushort object_id_t; trunk/src/defend/sim/Core.d
r583 r584 28 28 import defend.Config; 29 29 import defend.terrain.Map; 30 public { import defend.sim.Effector; }31 30 import defend.sim.Simulation; 32 31 import defend.mp.PlayerManager; … … 34 33 import defend.mp.Phase; 35 34 import defend.mp.Gateway; 35 36 public 37 { 38 import defend.sim.Effector; 39 } 36 40 37 41 // TODO: Find a way to split this file into multiple files, without circular imports. … … 1331 1335 assert(!queueOrders); 1332 1336 queueOrders = true; 1337 1338 debug(gameobjects) 1339 logger.trace("queuing orders"); 1333 1340 } 1334 1341 … … 1337 1344 assert(queueOrders); 1338 1345 queueOrders = false; 1346 1347 debug(gameobjects) 1348 logger.trace("sending {} queued orders", orderQueue.length); 1339 1349 1340 1350 foreach(container; orderQueue) trunk/src/engine/util/Log.d
r583 r584 110 110 synchronized(Stdout) 111 111 { 112 Stdout("[ "); 113 Stdout(logger); 112 Stdout("-+*!@"[level]); 113 Stdout(" [ ")(); 114 Stdout(logger)(); 114 115 Stdout(" ] "); 115 116 Stdout(text).newline;
