summaryrefslogtreecommitdiff
path: root/src/uqm/supermelee/netplay/notifyall.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/uqm/supermelee/netplay/notifyall.c')
-rw-r--r--src/uqm/supermelee/netplay/notifyall.c146
1 files changed, 146 insertions, 0 deletions
diff --git a/src/uqm/supermelee/netplay/notifyall.c b/src/uqm/supermelee/netplay/notifyall.c
new file mode 100644
index 0000000..2d0cc8a
--- /dev/null
+++ b/src/uqm/supermelee/netplay/notifyall.c
@@ -0,0 +1,146 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "notifyall.h"
+
+#include "netmelee.h"
+#include "notify.h"
+
+// Notify the network connections of a team name change.
+void
+Netplay_NotifyAll_setTeamName (MELEE_STATE *pMS, size_t playerNr)
+{
+ const char *name;
+ size_t len;
+ size_t playerI;
+
+ name = MeleeSetup_getTeamName (pMS->meleeSetup, playerNr);
+ len = strlen (name);
+ for (playerI = 0; playerI < NUM_PLAYERS; playerI++)
+ {
+ NetConnection *conn = netConnections[playerI];
+
+ if (conn == NULL)
+ continue;
+
+ if (!NetConnection_isConnected (conn))
+ continue;
+
+ if (NetConnection_getState (conn) != NetState_inSetup)
+ continue;
+
+ Netplay_Notify_setTeamName (conn, playerNr, name, len);
+ }
+}
+
+// Notify the network connections of the configuration of a fleet.
+void
+Netplay_NotifyAll_setFleet (MELEE_STATE *pMS, size_t playerNr)
+{
+ MeleeSetup *setup = pMS->meleeSetup;
+ const MeleeShip *ships = MeleeSetup_getFleet (setup, playerNr);
+ size_t playerI;
+
+ for (playerI = 0; playerI < NUM_PLAYERS; playerI++) {
+ NetConnection *conn = netConnections[playerI];
+
+ if (conn == NULL)
+ continue;
+
+ if (!NetConnection_isConnected (conn))
+ continue;
+
+ if (NetConnection_getState (conn) != NetState_inSetup)
+ continue;
+
+ Netplay_Notify_setFleet (conn, playerNr, ships, MELEE_FLEET_SIZE);
+ }
+}
+
+// Notify the network of a change in the configuration of a fleet.
+void
+Netplay_NotifyAll_setShip (MELEE_STATE *pMS, size_t playerNr, size_t index)
+{
+ MeleeSetup *setup = pMS->meleeSetup;
+ MeleeShip ship = MeleeSetup_getShip (setup, playerNr, index);
+
+ size_t playerI;
+ for (playerI = 0; playerI < NUM_PLAYERS; playerI++)
+ {
+ NetConnection *conn = netConnections[playerI];
+
+ if (conn == NULL)
+ continue;
+
+ if (!NetConnection_isConnected (conn))
+ continue;
+
+ if (NetConnection_getState (conn) != NetState_inSetup)
+ continue;
+
+ Netplay_Notify_setShip (conn, playerNr, index, ship);
+ }
+}
+
+static bool
+Netplay_NotifyAll_inputDelayCallback(NetConnection *conn, void *arg) {
+ const size_t *delay = (size_t *) arg;
+ Netplay_Notify_inputDelay(conn, *delay);
+ return true;
+}
+
+bool
+Netplay_NotifyAll_inputDelay(size_t delay) {
+ return forEachConnectedPlayer(Netplay_NotifyAll_inputDelayCallback,
+ &delay);
+}
+
+#ifdef NETPLAY_CHECKSUM
+void
+Netplay_NotifyAll_checksum(BattleFrameCounter frameNr, Checksum checksum) {
+ COUNT player;
+
+ for (player = 0; player < NUM_PLAYERS; player++)
+ {
+ NetConnection *conn = netConnections[player];
+ if (conn == NULL)
+ continue;
+
+ if (!NetConnection_isConnected(conn))
+ continue;
+
+ Netplay_Notify_checksum(conn, frameNr, checksum);
+ }
+}
+#endif /* NETPLAY_CHECKSUM */
+
+void
+Netplay_NotifyAll_battleInput(BATTLE_INPUT_STATE input) {
+ COUNT player;
+
+ for (player = 0; player < NUM_PLAYERS; player++)
+ {
+ NetConnection *conn = netConnections[player];
+ if (conn == NULL)
+ continue;
+
+ if (!NetConnection_isConnected(conn))
+ continue;
+
+ Netplay_Notify_battleInput(conn, input);
+ }
+}
+