private void Start() { string s = "hello"; Dj.Temp("Begin size test"); byte[] b = Capn.Crunchatize(s); for (var i = 0; i < 5; i++) { Dj.Tempf("Iter #{0}, size {1}", i, b.Length); b = Capn.Crunchatize(b); } backupTimer = backupFreqInSeconds; worldData = new WorldData(true); link = GetComponent <ServersideLink>(); sessions = new ServersideSessions(link); sessionToTowerEntities = new Dictionary <string, TowerEntity>(); entGenerator = new EntGenerator(); decoder = new TowerStoryDecoder(); sessions.SetFunctionToAddStoryListeners <TowerEntity>(TowerEntity.OPCODE, this.GetWhoCanSeeMe_UpdateTracking); sessions.SetFunctionToAddStoryListeners <TowerZone>(TowerZone.OPCODE, this.GetWhosListeningHere); sessions.storyteller.AddStoryfan(Session.OPCODE, new LambdaStoryfan <Session>(session => { if (sessionToTowerEntities.ContainsKey(session.address)) { if (session.PeerId < 0) { // you're disconnected but your body is still in the world. // bye now! } } else { if (session.PeerId >= 0) { // you're connected but don't have a body. let's remedy that! // int EntityId = (nextTowerEntityId++); var playerTowerEntity = entGenerator.NewPlayerEntity(); //playerTowerEntity.EntityId = EntityId; //playerTowerEntity.WorldPos = twin.zero; //playerTowerEntity.Position = twin.zero; session.EntityId = playerTowerEntity.EntityId; sessionToTowerEntities[session.address] = playerTowerEntity; session.WriteChanges(); sessions.storyteller.Write(playerTowerEntity); // suddenly, you're embodied } } } )); link.SetPostHandler <RequestStories, OK>(RequestStories.OPCODE, poster => { if (sessions.UsingPeer(poster.Peer.Id, out var session)) { Dj.Tempf("Server heard request from client"); poster.Reply(); PushStoriesToSession(session); } }); link.SetPostHandler <WorldMove, OK>(WorldMove.OPCODE, poster => { try { sessions.UsingPeer(poster.Peer.Id, out var session); var ent = sessionToTowerEntities[session.address]; ent.WorldPos += poster.action.dir; ent.WriteChanges(); poster.Reply(); PushEntitiesToSession(session); } catch { poster.Reject(Barebones.Networking.ResponseStatus.Failed); } }); SetupStartingZones(); }
public void LoadFromWorldBackup(string backupName) { var backupBytes = File.ReadAllBytes(Application.streamingAssetsPath + "/" + backupName); this.worldData = Capn.Decrunchatize <WorldData>(backupBytes); }