void mech_c3i_message(dbref player, MECH * mech, char *buffer) { cch(MECH_USUALO); DOCHECK(!HasC3i(mech), "This unit is not equipped with C3i!"); DOCHECK(C3iDestroyed(mech), "Your C3i system is destroyed!"); DOCHECK(AnyECMDisturbed(mech), "Your C3i system is not currently operational!"); validateC3iNetwork(mech); DOCHECK(MechC3iNetworkSize(mech) <= 0, "There are no other units in your C3i network!"); skipws(buffer); DOCHECK(!*buffer, "What do you want to send on the C3i Network?"); sendNetworkMessage(player, mech, buffer, 0); }
/*---------------------------------------------------------------------------------------------- -- FUNCTION: awaitFurtherInstructions -- -- DATE: February 27, 2015 -- -- REVISIONS: (Date and Description) -- -- DESIGNER: Calvin Rempel -- -- PROGRAMMER: Calvin Rempel, Jeff Bayntun -- -- INTERFACE: void awaitFurtherInstructions() -- -- -- NOTES: child Process waits for instructions from message queue, then takes action based on message type -----------------------------------------------------------------------------------------------*/ void Networking::SendProcess::awaitFurtherInstructions() { SendMessage message; size_t result; int length = sizeof(SendMessage); int parent_value; while (1) { // < -- READ FROM MESSAGE QUEUE HERE -- > memset(&message, 0, sizeof(SendMessage)); if( (result = msgrcv(qid, &message, length, 0, 0)) == -1) { perror("error receiving message"); break; } switch(message.type) { case ADD_SOCKET: // todo: get real socket in parent value parent_value = 99; // parent_value = ??? sockets.insert({parent_value, message.socket}); break; case REMOVE_SOCKET: sockets.erase(message.socket); break; case SEND_MESSAGE: //write message to network over properly mapped socket sendNetworkMessage(message.socket, message.data); break; case SHUTDOWN: closeSockets(false); return; default: break; } } }