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; } }
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); } }
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(); }
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"); }
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(); }