public PostAssistant(IIncommingMessage message) { this.message = message; try { this.action = Capn.Decrunchatize <ACTION>(message.AsBytes()); } catch (System.InvalidCastException ex) { Dj.Errorf("Still gonna crash, but just a heads up: expecting " + typeof(ACTION).ToString() + ", not getting it."); throw ex; } this.reply = new REPLY(); this.Done = false; }
public IMessage Post <ReplyType>(short opCode, object serializableObject, System.Action <ReplyType> successCallback, System.Action <ResponseStatus> nonSuccessCallback = null) { return(Post(opCode, serializableObject, (status, response) => { if (status == ResponseStatus.Success) { successCallback(Capn.Decrunchatize <ReplyType>(response.AsBytes())); } else if (nonSuccessCallback != null) { nonSuccessCallback(status); } })); }
public Story Decode(ServeStory serveAction) { Pages pages = Capn.Decrunchatize <Pages>(serveAction.storyBytes); foreach (var decoder in decoders) { var story = decoder.Decode(pages); if (story != null) { return(story); } } throw Dj.Crashf("Decode failed on Story with unknown OPCODE '{0}' at address '{1}'. (OPCODE was not caught by any pushed IStorydecoder)", pages.op, pages.address); }
////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(); } } ); }
public T Get <T>(string key) { return(Capn.Decrunchatize <T>(this.pages.data[key])); }
public void LoadFromWorldBackup(string backupName) { var backupBytes = File.ReadAllBytes(Application.streamingAssetsPath + "/" + backupName); this.worldData = Capn.Decrunchatize <WorldData>(backupBytes); }
public void SetPostHandler <BC>(short opCode, System.Action <BC> HandleBroadcast) where BC : struct { SetPostHandler(opCode, message => { HandleBroadcast(Capn.Decrunchatize <BC>(message.AsBytes())); }); }
public void LINKOPS_SetPostHandlers() { this.link.SetPostHandler(post.SessionLogin.op, message => { var login = Capn.Decrunchatize <post.SessionLogin>(message.AsBytes()); var reply = new post.SessionLogin_Reply(); if (login.playerid > 0 && login.sessionkey != default(string)) { // try login via userid x sessionkey var session = sessionsTeller.GetStory(login.playerid); if (session != null && session.GetPage().sessionkey == login.sessionkey && !session.GetPage().ServerOnly_IsExpired()) { Story <PlayerPage> player; if (BANG_Login(session, message.Peer)) { reply.okay = true; reply.sessionPage = session.GetPage(); } else { reply.bad_credentials = true; // idk } } else { reply.bad_credentials = true; } } else if (login.username.Length > 0 && login.hashpass.Length > 0) { // try login via username x hashpass int dbuserid; string dbhashpass; if (userdb.TryGetUsernameDetails(ref login.username, out dbuserid, out dbhashpass) && (login.hashpass == dbhashpass || dbhashpass == "*")) { Story <SessionPage> session; Story <PlayerPage> player; if (BANG_Login(dbuserid, login.username, message.Peer, out session)) { reply.okay = true; reply.sessionPage = session.GetPage(); } else { // login failed } } else { // user does not exist. login failed. } if (!reply.okay) { reply.bad_credentials = true; } } else { reply.bad_params = true; } message.Respond(Capn.Crunchatize(reply), ResponseStatus.Success); }); this.link.SetPostHandler(post.SessionLogout.op, message => { // var action = Capn.Decrunchatize<post.SessionLogout>(message.AsBytes()); var reply = new post.SessionLogout_Reply(); reply.okay = BANG_LogoutPeer(message.Peer); message.Respond(Capn.Crunchatize(reply), ResponseStatus.Success); }); this.link.SetPostHandler(post.SessionRefresh.op, message => { // var action = Capn.Decrunchatize<post.SessionRefresh>(message.AsBytes()); var reply = new post.SessionRefresh_Reply(); var story = GetSession(message.Peer); if (story != null) { reply.okay = true; reply.session = story.GetPage(); } message.Respond(Capn.Crunchatize(reply), ResponseStatus.Success); }); }