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