Ejemplo n.º 1
0
 public ClientsideSessions(ClientsideLink link)
 {
     this.link        = link;
     this.storyteller = new Storyteller(isAuthor: false);
     this.decoders    = new List <IStorydecoder>();
     PushStorydecoder(new SessionDecoder());
     this.link.SetPostHandler <ServeStory>(ServeStory.op, (post) =>
     {
         var story = storyteller.Read(Decode(post));
     }
                                           );
     this.link.SetPostHandler <ServeStoryDelta>(ServeStoryDelta.op, (post) =>
     {
         var story = storyteller.Read(post.delta);
     }
                                                );
 }
Ejemplo n.º 2
0
        ////constructor

        public CModelPlaysession(ClientsideLink link, System.Action <Story <SessionPage> > RequestNewSessionPages, System.Action <Story <PlayerPage> > ShowNewPlayer) : base(link)
        {
            this.RequestNewSessionPages = RequestNewSessionPages;
            this.ShowNewPlayer          = ShowNewPlayer;
            this.link.OnDisconnected   += () => {
                ServersideSetPlayer(null);
                // TODO: automatically handle reconnection attempts and session dropping.
            };
            this.link.SetPostHandler(
                bc.PlayerDelta.op,
                message => {
                var action = Capn.Decrunchatize <bc.PlayerDelta>(message.AsBytes());
                if (this.myPlayer != null)
                {
                    this.myPlayer.ListenDelta(action.idelta);
                    this.myPlayer.ApplyAllPendingDeltas();
                }
            }
                );
        }
Ejemplo n.º 3
0
        private void Start()
        {
            link     = GetComponent <ClientsideLink>();
            sessions = new ClientsideSessions(link);
            link.AttemptConnection(success =>
            {
                if (success)
                {
                    sessions.DoLogin("droqen");
                }
                else
                {
                    Dj.Warnf("Login failed. TODO: Implement retry");
                }
            });
            sessions.AddStoryfan(Session.OPCODE, new LambdaStoryfan <Session>(session =>
            {
                if (currentSession == null || currentSession.Username != session.Username)
                {
                    currentSession = session;
                    link.Post <OK>(RequestStories.OPCODE, new RequestStories {
                        message = "Hello from " + currentSession.Username,
                    },
                                   reply =>
                    {
                    },
                                   failStatus =>
                    {
                        Dj.Tempf("RequestStories rejected with status {0}. Recommended to either request again, or disconnect.", failStatus);
                    });
                }

                Dj.Tempf("My session says my name is '{0}'", currentSession.Username);
            }));

            sessions.AddStoryfan(TowerZone.OPCODE, new LambdaStoryfan <TowerZone>(zone =>
            {
                currentZone = zone;

                visibleEntities.Clear();
            }));

            sessions.AddStoryfan(TowerEntity.OPCODE, new LambdaStoryfan <TowerEntity>(ent =>
            {
                bool its_me = false;
                try
                {
                    if (currentSession.EntityId == ent.EntityId)
                    {
                        myEntity = ent;
                        its_me   = true;
                    }
                }
                catch { }

                if (!its_me)
                {
                    if (ent.WorldPos == currentZone.WorldPos)
                    {
                        visibleEntities.Add(ent);
                    }
                    else
                    {
                        visibleEntities.Remove(ent);
                    }
                }
            }));

            sessions.PushStorydecoder(new TowerStoryDecoder());
        }
Ejemplo n.º 4
0
 public CModelBase(ClientsideLink link)
 {
     this.link = link;
 }
Ejemplo n.º 5
0
 private void Awake()
 {
     link = GetComponent <ClientsideLink>();
 }