public void Reply() { if (Done) { throw Dj.Crash("Can only REPLY or REJECT one time on a PostAssistant"); } message.Respond(Capn.Crunchatize(reply), ResponseStatus.Success); Done = true; }
public void Post(int peerId, short opCode, object serializableObject) { IPeer peer = master.GetPeer(peerId); if (peer == null) { Dj.Errorf("Post to peer#{0} failed", peerId); } else { peer.SendMessage(opCode, Capn.Crunchatize(serializableObject)); } }
public string CreateWorldBackup() { var sanitizedData = this.worldData.Clone(); foreach (var sessionKVP in sessionToTowerEntities) { sanitizedData.entitiesById.Remove(sessionKVP.Value.EntityId); } var backupBytes = Capn.Crunchatize(sanitizedData); string backupName = "lastbackup"; File.WriteAllBytes(Application.streamingAssetsPath + "/" + backupName, backupBytes); return(backupName); }
public IMessage Post(short opCode, object serializableObject, ResponseCallback responseCallback) { IMessage message = MessageHelper.Create(opCode, Capn.Crunchatize(serializableObject)); if (IsConnected) { Peer.SendMessage( message, responseCallback, 3, DeliveryMethod.Reliable ); } else { Dj.Warn("Post to server failed (Not connected)"); message.Status = ResponseStatus.NotConnected; } // Dj.Temp("Message status = "+message.Status); return(message); }
public byte[] ToBytes() { return(Capn.Crunchatize(this.pages)); }
public void Set <T>(string key, T value) { this.pages.data[key] = Capn.Crunchatize(value); }
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 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); }); }