Exemple #1
0
        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();
        }
Exemple #2
0
        public void LoadFromWorldBackup(string backupName)
        {
            var backupBytes = File.ReadAllBytes(Application.streamingAssetsPath + "/" + backupName);

            this.worldData = Capn.Decrunchatize <WorldData>(backupBytes);
        }