void adapter_ReceiveObservers(object sender, NetPackageReceived e)
 {
     mainwindow.Dispatcher.Invoke((Action)(() => {
         if (e.pack.contentType == NetPackageTypes.Tactic) {
             using (MemoryStream stream = new MemoryStream((byte[])e.pack.content)) {
                 stream.Position = 0;
                 tactics.getTactic().unserialize(stream);
             }
             tactics.initFromTactics();
         } else if (e.pack.contentType == NetPackageTypes.ClientList) {
             mainwindow.setClients((string[])e.pack.content);
         } else if (e.pack.contentType == NetPackageTypes.Settings) {
             mainwindow.setClientsPing(adapter.canPing());
             mainwindow.setClientsDraw(adapter.canDraw());
         } else if (e.pack.contentType == NetPackageTypes.Ping) {
             byte[] cell = (byte[])e.pack.content;
             mainwindow.pingCell(cell[0], cell[1]);
         } else if (e.pack.contentType == NetPackageTypes.SetTimer) {
             mainwindow.setTime((int)e.pack.content);
         } else if (e.pack.contentType == NetPackageTypes.SetBattletype) {
             object[] data = (object[])e.pack.content;
             tactics.setBattleType((BattleType)data[0], (string)data[1]);
         } else if (e.pack.contentType == NetPackageTypes.ShowStatic) {
             mainwindow.showStatic();
         } else if (e.pack.contentType == NetPackageTypes.ShowDynamic) {
             mainwindow.showDynamic();
         } else if (e.pack.contentType == NetPackageTypes.ShowPlayStatic) {
             mainwindow.showPlayStatic();
         } else if (e.pack.contentType == NetPackageTypes.ShowPlayDynamic) {
             mainwindow.showPlayDynamic();
         } else if (e.pack.contentType == NetPackageTypes.DrawPoints) {
             PointsPacket pack = (PointsPacket)e.pack.content;
             tactics.drawPoints(pack.ps, pack.getColor(), pack.thickness, pack.time);
         } else if (e.pack.contentType == NetPackageTypes.DrawEraserPoints) {
             PointsPacket pack = (PointsPacket)e.pack.content;
             tactics.drawEraserPoints(pack.ps, pack.thickness, pack.time);
         } else if (e.pack.contentType == NetPackageTypes.DrawLine) {
             LinesPacket pack = (LinesPacket)e.pack.content;
             tactics.drawLine(pack.from, pack.to, pack.getColor(), pack.thickness, pack.getDashStyle(), pack.time);
         } else if (e.pack.contentType == NetPackageTypes.DrawArrow) {
             LinesPacket pack = (LinesPacket)e.pack.content;
             tactics.drawArrow(pack.from, pack.to, pack.getColor(), pack.thickness, pack.getDashStyle(), pack.time);
         } else if (e.pack.contentType == NetPackageTypes.DrawStamp) {
             StampPackage pack = (StampPackage)e.pack.content;
             tactics.drawStamp(pack.p, pack.getImage(), pack.size, pack.time);
         } else if (e.pack.contentType == NetPackageTypes.ResetDrawAt) {
             tactics.removeDraw((int)e.pack.content);
         } else if (e.pack.contentType == NetPackageTypes.CloneDrawAt) {
             tactics.cloneTactic((int)e.pack.content + 30, (int)e.pack.content);
         } else if (e.pack.contentType == NetPackageTypes.ReloadDynamic) {
             Stream stream = unzip((byte[])e.pack.content);
             tactics.unserializeDynamicTactic(stream);
         } else if (e.pack.contentType == NetPackageTypes.StaticTimer) {
             tactics.setStaticTimer((bool)e.pack.content);
         } else if (e.pack.contentType == NetPackageTypes.DynamicTimer) {
             tactics.setDynamicTimer((bool)e.pack.content);
         }
     }));
 }
 void Briefing_ReceiveObservers(object sender, NetPackageReceived e)
 {
     if (e.pack.contentType == NetPackageTypes.Settings) {
         BriefingSettings sets = (BriefingSettings)e.pack.content;
         clientsPing = sets.clientsPing;
         clientsDraw = sets.clientsDraw;
     } else if (isServer() && (
         e.pack.contentType == NetPackageTypes.Tactic ||
         e.pack.contentType == NetPackageTypes.Ping ||
         e.pack.contentType == NetPackageTypes.DrawPoints ||
         e.pack.contentType == NetPackageTypes.DrawEraserPoints ||
         e.pack.contentType == NetPackageTypes.DrawLine ||
         e.pack.contentType == NetPackageTypes.DrawArrow ||
         e.pack.contentType == NetPackageTypes.DrawStamp ||
         e.pack.contentType == NetPackageTypes.SetTimer ||
         e.pack.contentType == NetPackageTypes.SetBattletype ||
         e.pack.contentType == NetPackageTypes.ShowStatic ||
         e.pack.contentType == NetPackageTypes.ShowDynamic ||
         e.pack.contentType == NetPackageTypes.ShowPlayStatic ||
         e.pack.contentType == NetPackageTypes.ShowPlayDynamic ||
         e.pack.contentType == NetPackageTypes.ResetDrawAt ||
         e.pack.contentType == NetPackageTypes.CloneDrawAt ||
         e.pack.contentType == NetPackageTypes.ReloadDynamic ||
         e.pack.contentType == NetPackageTypes.StaticTimer ||
         e.pack.contentType == NetPackageTypes.DynamicTimer
         )) {
             sendExclude(e.pack, e.pack.sender);
     }
 }
 private void dispatchPackageEvent(NetPackageReceived e)
 {
     if (ReceiveObservers != null) {
         ReceiveObservers(this, e);
     }
 }