Example #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;
                }
            }
Example #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);
            }
        }
Example #3
0
        public void Server(object obj)
        {
            var scene = new SyncScene();

            scene.Init();

            scene.MasterAddObj(new GameState
            {
                canRecvMsg = false,
                id         = 3,
                safePoint  = new Vector3(),
                safeRadius = 1000
            });

            scene.onSendMsg = (id, msg) =>
            {
                if (id != 1)
                {
                    return;
                }
                lock (queue)
                {
                    queue.Enqueue(msg);
                }
            };

            scene.onObjAdded = added =>
            {
                switch (added)
                {
                case Player player:
                    player.csFire = (dst, count, hit) => { };
                    player.csMove = (pos, dir, state) => { };
                    break;
                }
            };
            scene.onObjRefreshed = refreshed => { };
            scene.onObjRemoved   = removed => { };


            var p1 = new Player {
                id = 1
            };
            var p2 = new Player {
                id = 2
            };

            p1.csMove = (pos, dir, state) =>
            {
                p1.pos   = pos;
                p1.dir   = dir;
                p1.state = state;
            };
            p1.csFire = (targetId, bulletCount, isHit) =>
            {
                p2.hp = 0;
                p2.scExplode();
            };
            p2.scExplode = () => { };


            scene.MasterAddObj(p1);
            scene.MasterAddObj(p2);


            while (true)
            {
                scene.MasterUpdateObjs();
                Thread.Sleep(100);
            }

            scene.MasterRemoveObj(p2.id);


            scene.Destroy();
        }
Example #4
0
        private static void Main(string[] arg)
        {
            try
            {
                SyncScene scene   = null;
                var       quit    = false;
                var       handler = new ConsoleCmdHandler();
                LoggerUtil.Info(typeof(Program), "client inited");
                using (var cli = new UDPNetworkMT())
                {
                    cli.Trace        = true;
                    cli.OnConnect    = () => LoggerUtil.Info(typeof(Program), "connected");
                    cli.OnDisconnect = () => LoggerUtil.Info(typeof(Program), "disconnected");
                    cli.OnReceive    = (bytes, channelId) => LoggerUtil.Info(typeof(Program), "recv: " + Encoding.ASCII.GetString(bytes));

                    handler.OnCmd = args =>
                    {
                        switch (args[0])
                        {
                        case "c":
                            cli.Connect("127.0.0.1", 1234);
                            break;

                        case "q":
                            cli.Disconnect();
                            quit = true;
                            break;

                        case "dc":
                            cli.Disconnect();
                            break;

                        case "p":
                            cli.Pause = !cli.Pause;
                            LoggerUtil.Info(typeof(Program), "pause:{0}", cli.Pause);
                            break;

                        default:
                            var cmd = string.Join(" ", args);
                            if (cmd.StartsWith("`"))
                            {
                                cli.Send(Encoding.ASCII.GetBytes(cmd.Remove(0, 1)));
                            }

                            break;
                        }
                    };

                    while (!quit)
                    {
                        handler.Update();

                        cli.Update();
                        Thread.Sleep(100);
                    }
                }
            }
            catch (Exception e)
            {
                LoggerUtil.Fatal(typeof(Program), e.ToString());
            }

            LoggerUtil.Info(typeof(Program), "client exited");
        }
Example #5
0
        public static void Test()
        {
            var cli   = new Client();
            var scene = new SyncScene();

            scene.Init();
            scene.onSendMsg = (id, msg) =>
            {
                if (id != 1)
                {
                    return;
                }

                cli.RecvMsg(msg);
            };
            scene.MasterAddObj(new GameState
            {
                canRecvMsg = false,
                id         = 3,
                safePoint  = new Vector3(),
                safeRadius = 1000
            });
            scene.onObjAdded = added =>
            {
                switch (added)
                {
                case Player player:
                    player.csMove = (pos, dir, state) =>
                    {
                        player.pos   = pos;
                        player.dir   = dir;
                        player.state = state;
                    };
                    player.csFire = (targetId, bulletCount, isHit) =>
                    {
                        var target = scene.FindObj(targetId) as Player;
                        target.hp = 0;
                        target.scExplode();
                    };
                    player.scExplode = () =>
                    {
                        // pack rpc
                    };
                    break;
                }
            };
            scene.onObjRefreshed = refreshed => { };
            scene.onObjRemoved   = removed => { };
            var p1 = new Player {
                id = 1
            };
            var p2 = new Player {
                id = 2
            };

            scene.MasterAddObj(p1);
            cli.Dispatch();
            scene.MasterAddObj(p2);
            cli.Dispatch();
            scene.MasterRemoveObj(p2.id);
            scene.Destroy();
        }