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

Data Transfer

Game Features

Utilities

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

RR_CONTINUE_PROCESSING

Pass to next plugin/application

RR_STOP_PROCESSING

Stop, but keep packet for application

RR_STOP_PROCESSING_AND_DEALLOCATE

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