+} //InitiateConnection
+
+ExtFunc void HandShake(void)
+{ //talk to your host
+ MyEvent event;
+
+ {
+ netint4 versiondata[2];
+ versiondata[0] = hton4(MAJOR_VERSION);
+ versiondata[1] = hton4(PROTOCOL_VERSION);
+ SendPacket(0, NP_hello, sizeof(versiondata), versiondata);
+ }
+
+ do {
+ if (WaitMyEvent(&event, EM_net) == E_net)
+ switch (event.u.net.type) {
+ case NP_hello:
+ {
+ me = event.u.net.uid;
+ memcpy(&Players[me], &Players[0], sizeof(Player));
+ fprintf(stderr, "Accepted (%s) as #%d (%s)\n",
+ event.u.net.data, me, Players[me].name);
+ SendPacket(0, NP_newPlayer,
+ sizeof(Player) - sizeof(Players[me].host) - sizeof(Players[me].spy),
+ &Players[me]);
+ break;
+ }
+ case NP_gamedata:
+ {
+ fprintf(stderr, ": %d\n", event.type);
+ break;
+ }
+ case NP_newPlayer:
+ {
+ totalPlayers++;
+ memcpy(&Players[event.u.net.uid],
+ event.u.net.data, event.u.net.size);
+ fprintf(stderr, "Receiving player #%d (%s)\n",
+ event.u.net.uid, Players[event.u.net.uid].name);
+ break;
+ }
+ case NP_error:
+ {
+ fprintf(stderr, "Rejected by server: %s\n", event.u.net.data);
+ exit(1);
+ }
+ default:
+ break;
+ }
+ else
+ fatal("Hm, the party apparantly ended prematurely.");
+ }
+ while (event.u.net.type != NP_goAhead);
+
+ // send Players[0]
+ // receive seed, initspeed
+ // receive #players
+ // receive Players[*]
+
+ /*
+ {
+ netint4 data[3];
+ int len;
+ int seed;
+
+ if (protocolVersion >= 3)
+ len = sizeof(data);
+ else
+ len = sizeof(netint4[2]);
+ if ((Players[0].flags & SCF_setSeed))
+ seed = Game.seed;
+ else
+ seed = time(0);
+ if (waitConn)
+ SRandom(seed);
+ data[0] = hton4(Players[0].flags);
+ data[1] = hton4(seed);
+ data[2] = hton4(Game.initspeed);
+ SendPackets(0, NP_startConn, len, data);
+ if (WaitMyEvent(&event, EM_net) != E_net ||
+ event.u.net.type != NP_startConn)
+ fatal("Network negotiation failed");
+ memcpy(data, event.u.net.data, len);
+ Players[1].flags = ntoh4(data[0]);
+ seed = ntoh4(data[1]);
+ if (initConn) {
+ if ((Players[0].flags & SCF_setSeed) != (Players[1].flags & SCF_setSeed))
+ fatal("If one player sets the random number seed, "
+ "both must.");
+ if ((Players[0].flags & SCF_setSeed) && seed != Game.seed)
+ fatal("Both players have set the random number seed, "
+ "and they are unequal.");
+ if (protocolVersion >= 3 && Game.initspeed != ntoh4(data[2]))
+ fatal("Your opponent is using a different step-down "
+ "interval (-i).\nYou must both use the same one.");
+ SRandom(seed);
+ }
+ }
+ */
+// SendPackets(0, NP_initData, strlen(Players[0].name) + 1, Players[0].name);
+
+/*
+ if (WaitMyEvent(&event, EM_net) != E_net ||
+ event.u.net.type != NP_userName)
+ fatal("Network negotiation failed");
+ strncpy(Players[1].name, event.u.net.data,
+ sizeof(Players[1].name) - 1);
+ Players[1].name[sizeof(Players[1].name)-1] = 0;
+ for (i = 0; Players[1].name[i]; ++i)
+ if (!isprint(Players[1].name[i]))
+ Players[1].name[i] = '?';
+ for (i = 0; Players[1].host[i]; ++i)
+ if (!isprint(Players[1].host[i]))
+ Players[1].host[i] = '?';
+*/
+} //HandShake
+
+ExtFunc void CheckNetConn(void)
+{ //am I necessary?