void Torrent::deletePeer(Peer::Id id){ qDebug() << "Removing peer: " << id; PeerPtr peerPtr = findPeer(id); mPeers.remove(id); emit onPeerDisconnected(peerPtr); }
bool Host::sendPacketTo(TargetID targetID, ChannelID channel, PacketType type, const PacketData& data) { switch (targetID) { case LOCAL: { if (m_observer) { PacketData copy = data; m_observer->onPacketReceived(targetID, copy); } return true; } case BROADCAST: return broadcast(channel, type, data); case SERVER: { if (isServer()) return sendPacketTo(LOCAL, channel, type, data); /* FALLTHROUGH */ } default: { Peer* peer = findPeer(targetID); if (!peer) { logError("Cannot send event to unknown peer %u", targetID); return false; } return peer->sendPacket(channel, type, data); } } }
t_stat ipc (ipc_funcs fn, char *arg1, char *arg2, char *arg3, int32 UNUSED arg4) { // if (!checkIPC()) // return SCPE_UDIS; switch (fn) { case ipcStart: if (actor) killIPC(); actor = zactor_new (ipc_actor, arg1); assert (actor); deletePeers(); // remove all peers break; case ipcStop: ipc_printf("Stopping IPC ... "); killIPC(); ipc_printf("deleted %d peers ... ", deletePeers()); ipc_printf("done\n"); break; case ipcRestart: ipc(ipcStop, 0, 0, 0, 0); // kill IPC deletePeers(); ipc(ipcStart, fnpName, 0, 0, 0); // start IPC break; case ipcEnter: //sim_debug (DBG_VERBOSE, &ipc_dev, "%s/%s has entered " STR(IPC_GROUP) "\n", arg1, arg2); if (ipc_verbose) ipc_printf("(ENTER) %s/%s has entered %s from %s\n", arg1, arg2, fnpGroup, arg3); savePeer(arg1, arg2); break; case ipcExit: //sim_debug (DBG_VERBOSE, &ipc_dev, "%s has left " STR(IPC_GROUP) "\n", arg1); if (ipc_verbose) ipc_printf("(EXIT) %s/%s has left %s\n", arg1, arg2, fnpGroup); removePeer(arg1); break; case ipcShoutTx: zstr_sendx (actor, "SHOUT", arg1, NULL); break; case ipcWhisperTx: #if 1 if (arg1) // WHISPER msg (use last whisper peer) { IPC_Peer *p1 = findPeer(stripquotes(trim(arg1))); // f**k for peer named 'name' if (p1) strcpy(lastPeer, p1->peerID); // save Peer id else { bool bGuid = isGUID(stripquotes(trim(arg1))); if (!bGuid) { sim_printf("Error: '%s' is not a GUID or a known peer\n", arg1); return SCPE_ARG; } strcpy(lastPeer, arg1); // Peer name not found, assume arg1 is a peerID then... } } #endif zstr_sendx (actor, "WHISPER", arg2, NULL); break; case ipcShoutRx: // when we receive a broadcast message //sim_debug (DBG_VERBOSE, &ipc_dev, "%s: %s\n", arg1, arg2); if (ipc_verbose) ipc_printf("(RX SHOUT) %s/%s:<%s>\n", arg1, arg2, arg3); break; case ipcWhisperRx: // when we receive a peer-to-peer (whisper) message //sim_debug (DBG_VERBOSE, &ipc_dev, "%s: %s\n", arg1, arg2); if (ipc_verbose) ipc_printf("(RX WHISPER) %s/%s:<%s>\n", arg1, arg2, arg3); if (strncmp (arg1, "fnp-", 4) == 0) diaCommand (arg1, arg2, arg3); else if (strncmp (arg1, "scp", 3) == 0) scpCommand (arg1, arg2, arg3); else ipc_printf ("dropping whisper from unknown source %s/%s:<%s>\n", arg1, arg2, arg3); break; case ipcTest: zyre_test(true); break; default: break; } return SCPE_OK; }