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); } ); }
////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(); } } ); }
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()); }
public CModelBase(ClientsideLink link) { this.link = link; }
private void Awake() { link = GetComponent <ClientsideLink>(); }