Beispiel #1
0
 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);
         }
     }));
 }
Beispiel #3
0
        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);
        }
Beispiel #4
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();
                }
            }
                );
        }
Beispiel #5
0
 public T Get <T>(string key)
 {
     return(Capn.Decrunchatize <T>(this.pages.data[key]));
 }
Beispiel #6
0
        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())); });
 }
Beispiel #8
0
        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);
            });
        }