Plugins Overview¶
MafiaNet’s plugin system allows extending functionality without modifying core code.
Using Plugins¶
#include "mafianet/PluginInterface2.h"
// Create plugin instance
MafiaNet::SomePlugin* plugin = MafiaNet::SomePlugin::GetInstance();
// Attach to peer
peer->AttachPlugin(plugin);
// Later, detach if needed
peer->DetachPlugin(plugin);
// Destroy when done
MafiaNet::SomePlugin::DestroyInstance(plugin);
Available Plugins¶
Networking
FullyConnectedMesh2 Plugin - Peer-to-peer mesh networking
NAT Punchthrough - NAT traversal
NATTypeDetection Plugin - Detect NAT type
Router2 Plugin - Route packets through peers
Data Transfer
FileListTransfer Plugin - Transfer files
DirectoryDeltaTransfer Plugin - Sync directories
Autopatcher Plugin - Delta patching system
Game Features
ReplicaManager3 - Object replication
ReadyEvent Plugin - Synchronize ready states
TeamManager Plugin - Team management
RPC4 Plugin - Remote procedure calls
Utilities
MessageFilter Plugin - Filter messages
PacketLogger Plugin - Log network traffic
TwoWayAuthentication Plugin - Secure authentication
CloudComputing Plugin - Distributed architecture
Creating Custom Plugins¶
Extend PluginInterface2:
class MyPlugin : public MafiaNet::PluginInterface2 {
public:
// Called when attached
virtual void OnAttach() override {
printf("Plugin attached\n");
}
// Process received packets
virtual MafiaNet::PluginReceiveResult OnReceive(
MafiaNet::Packet* packet) override {
if (packet->data[0] == MY_MESSAGE) {
HandleMyMessage(packet);
return MafiaNet::RR_STOP_PROCESSING_AND_DEALLOCATE;
}
return MafiaNet::RR_CONTINUE_PROCESSING;
}
// Connection events
virtual void OnNewConnection(
const MafiaNet::SystemAddress& addr,
MafiaNet::RakNetGUID guid,
bool isIncoming) override {
printf("New connection: %s\n", addr.ToString());
}
virtual void OnClosedConnection(
const MafiaNet::SystemAddress& addr,
MafiaNet::RakNetGUID guid,
MafiaNet::PI2_LostConnectionReason reason) override {
printf("Connection closed: %s\n", addr.ToString());
}
};
Plugin Receive Results¶
Result |
Description |
|---|---|
|
Pass to next plugin/application |
|
Stop, but keep packet for application |
|
Stop and deallocate packet |
Plugin Order¶
Plugins process packets in attachment order. First attached processes first.
peer->AttachPlugin(loggerPlugin); // Processes first
peer->AttachPlugin(filterPlugin); // Processes second
peer->AttachPlugin(gamePlugin); // Processes third