예제 #1
0
            private void dispatch(IExtensible msg)
            {
                switch (msg)
                {
                case NsSyncSceneEnter sceneInit:
                    scene = new SyncScene();
                    scene.Init();
                    scene.onObjAdded = added =>
                    {
                        switch (added)
                        {
                        case Player player:
                            player.csFire    = (dst, count, hit) => { };
                            player.csMove    = (pos, dir, state) => { };
                            player.scExplode = () =>
                            {
                                /* play effect */
                            };
                            if (added.id == 1)
                            {
                                player.csFire(2, 5, true);
                            }

                            break;
                        }
                    };
                    scene.onObjRemoved   = removed => { };
                    scene.onObjRefreshed = refreshed => { };
                    break;

                case NsSyncSceneExit sceneDestroy:
                    scene.Destroy();
                    scene = null;
                    break;

                case NsSyncObjAdded objAdded:
                    scene.MirrorDealMsg(objAdded);
                    break;

                case NsSyncObjRefreshed objRefreshed:
                    scene.MirrorDealMsg(objRefreshed);
                    break;

                case NsSyncObjRemoved objRemoved:
                    scene.MirrorDealMsg(objRemoved);
                    break;
                }
            }
예제 #2
0
        public void Client(object obj)
        {
            SyncScene scene = null;

            while (true)
            {
                lock (queue)
                {
                    while (queue.Count > 0)
                    {
                        var msg = queue.Dequeue();
                        switch (msg)
                        {
                        case NsSyncSceneEnter sceneInit:
                            scene = new SyncScene();
                            scene.Init();
                            scene.onObjAdded = added =>
                            {
                                switch (added)
                                {
                                case Player player:
                                    player.csFire    = (dst, count, hit) => { };
                                    player.csMove    = (pos, dir, state) => { };
                                    player.scExplode = () =>
                                    {
                                        /* play effect */
                                    };
                                    if (added.id == 1)
                                    {
                                        player.csFire(2, 5, true);
                                    }

                                    break;
                                }
                            };
                            scene.onObjRemoved   = removed => { };
                            scene.onObjRefreshed = refreshed => { };
                            break;

                        case NsSyncSceneExit sceneDestroy:
                            scene.Destroy();
                            scene = null;
                            break;

                        case NsSyncObjAdded objAdded:
                            scene.MirrorDealMsg(objAdded);
                            break;

                        case NsSyncObjRefreshed objRefreshed:
                            scene.MirrorDealMsg(objRefreshed);
                            break;

                        case NsSyncObjRemoved objRemoved:
                            scene.MirrorDealMsg(objRemoved);
                            break;
                        }
                    }
                }

                Thread.Sleep(100);
            }
        }