コード例 #1
0
ファイル: TestWorldPacket.cs プロジェクト: if1live/hatsushimo
        public void TestSerde()
        {
            var a = new WorldJoinPacket("foo", "test", PlayerMode.Observer);
            var b = SerializeAndDeserialize(a);

            Assert.Equal(a, b);
        }
コード例 #2
0
        void HandleJoinReq(Session session, WorldJoinPacket p)
        {
            var ok = Join(session, p.Nickname, p.Mode);

            log.Info($"world join: id={session.ID} world={ID} ok={ok} size={sessions.Count}");

            var holder = GetPlayerHolder(session);

            if (holder.Mode == PlayerMode.Player)
            {
                room.Join(holder.Player);
            }
            else if (holder.Mode == PlayerMode.Observer)
            {
                room.Join(holder.Observer);
            }
            else
            {
                return;
            }

            var resp = new WorldJoinResultPacket(0, session.ID);

            session.SendLazy(resp);
        }
コード例 #3
0
ファイル: APIRunner.cs プロジェクト: if1live/hatsushimo
        public async Task <bool> WorldJoin(string worldID, string nickname)
        {
            var send = new WorldJoinPacket(worldID, nickname, PlayerMode.Player);
            var recv = await conn.SendRecv <WorldJoinPacket, WorldJoinResultPacket>(send);

            return(true);
        }
コード例 #4
0
ファイル: Lobby.cs プロジェクト: if1live/hatsushimo
        private void Start()
        {
            var conn = ConnectionManager.Instance;

            genUUIDButton.OnClickAsObservable().Subscribe(_ =>
            {
                // 같은 클라에서 같은 uuid 생성되는게 싫을떄
                // 같은 컴퓨터에서 실행할 경우
                var uuid       = Guid.NewGuid();
                uuidField.text = uuid.ToString();
            }).AddTo(this);

            ConnectionManager.Instance.ReadyObservable.ObserveOnMainThread().Subscribe(_ =>
            {
                joinPlayerButton.interactable   = true;
                joinObserverButton.interactable = true;
            }).AddTo(this);

            joinPlayerButton.OnClickAsObservable().Subscribe(_ =>
            {
                OnJoinButtonClicked(PlayerMode.Player);
            }).AddTo(this);

            joinObserverButton.OnClickAsObservable().Subscribe(_ =>
            {
                OnJoinButtonClicked(PlayerMode.Observer);
            }).AddTo(this);

            conn.Welcome.Received.ObserveOnMainThread().Subscribe(p =>
            {
                var info      = ConnectionInfo.Info;
                info.PlayerID = p.UserID;
            });

            conn.SignUp.Received.ObserveOnMainThread().Subscribe(p =>
            {
                Debug.Log($"sign up result: {p.ResultCode}");

                var auth = new AuthenticationPacket(UUID);
                conn.SendImmediate(auth);
            }).AddTo(this);

            conn.Authentication.Received.ObserveOnMainThread().Subscribe(p =>
            {
                Debug.Log($"authentication result: {p.ResultCode}");

                if (p.ResultCode == 0)
                {
                    Debug.Assert(mode != PlayerMode.None);

                    var info        = ConnectionInfo.Info;
                    info.WorldID    = WorldID;
                    info.Nickname   = Nickname;
                    info.PlayerMode = mode;

                    var join = new WorldJoinPacket(WorldID, Nickname, mode);
                    conn.SendImmediate(join);
                }
            }).AddTo(this);

            conn.WorldJoin.Received.ObserveOnMainThread().Subscribe(p =>
            {
                Debug.Log($"player id={p.PlayerID}");
                if (p.ResultCode != 0)
                {
                    var info      = ConnectionInfo.Info;
                    info.WorldID  = "";
                    info.Nickname = "";
                }


                // TOOD async scene loading
                SceneManager.LoadScene("Game", LoadSceneMode.Single);
            }).AddTo(this);
        }