• IS THIS SITE UGLY? Click "RG3" at the very bottom-left of this page to change it. To dismiss this notice, click the X --->
Resource icon

Plugin - MQ2DanNet 0.72

dannuic

Well-known member
Joined
Sep 12, 2004
Likes
60
RedCents
4,478¢
#1
dannuic submitted a new resource:

MQ2DanNet - It's not just for Dans anymore

Here we have an auto-discovery peer to peer networking plugin that utilizes ∅MQ and zyre. I have linked the README.md on the github for command/TLO/ini reference.

The gdrive link points to the latest live build, but the source compiles for ROF2 and Test without modification, so feel free to clone https://github.com/dannuic/MQ2Dan and compile it (all required libs are built and statically linked along with it). I usually have a test build available since I play on test, so...
Read more about this resource...
 

Maskoi

So old and salty he grew scales
Staff member
Joined
Sep 28, 2005
Likes
318
RedCents
64,533¢
#2
Some Notes about Setup
  • Some complicated network topologies won't be supported (a server interface is a better solution)
  • If for some reason the peers aren't self-discovering on a local network
    • check the output of /dnet interface
    • set one of the discovered interface names with /dnet interface <name>
    • failing that, I'll have to look into why, so contact me with as much info as possible
Use
There are 2 basic uses
  1. Set up an observer
  • Methods of setting up an observer
    • /dobserve <name> <query>
    • ${DanNet[<name>].Observe[<query>]} or ${DanNet[<name>].O[<query>]}
  • Reading an observer's data: ${DanNet[<name>].Observe[<query>]} or ${DanNet[<name>].O[<query>]}
  • Dropping an observer: /dobserve <name> <query> drop

  1. Single-use direct query
  • Submitting a query: /dquery <name> [-q <query>] [-o <result>] [-t <timeout>]
    • Combines /delay with /varset
    • timeout is optional, and the default can be configured
    • result is optional, will just write out the result if omitted
    • If not run in a macro, ignores result and just writes out
Queries

A query is simply a normal TLO access from the perspective of the peer with the external ${} stripped Examples:
  • Me.CurrentMana
  • Target.ID
  • Me.Current$\{thing} -- this will evaluate ${thing} on the peer before sending a response
Names

A fully-qualified name is <server>_<character>, but if you only intend to communicate on your own server, you can ommit the first part and use just <charactername> in all these commands. Examples:
  • Locally talk to fatty: /dtell fatty You smell.
  • Talk to fatty on the test server: /dtell test_fatty I can still smell you from this server!
Commands

I have added some simple echo commands in addition to /dinfo and /dobserve, as well as a way to join/leave arbitrary groups.
  • /djoin <group> [all|save] -- join a group, and optionally write to [General] or [server_character] (all or save, respectively)
  • /dleave <group> [all|save] -- leave a group, and optionally write to [General] or [server_character] (all or save, respectively)
  • /dtell <name> <text> -- echo text on peer's console
  • /dgtell <group> <text> -- echo text on console for all peers in group
  • /dexecute <name> <command> -- executes a command on peer's client
  • /dgexecute <group> <command> -- executes a command on all clients in a group (except own)
  • /dgaexecute <group> <command> -- executes a command on all clients in a group (including own)
  • /dnet [<arg>] -- sets some variables, gives info, check in-game output for use
  • /dobserve <name> [-q <query>] [-o <result>] [-drop] -- add an observer on name and update values in result, or drop the observer
  • /dquery <name> [-q <query>] [-o <result>] [-t <timeout>] -- execute query on name and store return in result
TLO Members
  • Name -- current node name (fully qualified)
  • Debug -- debugging flag
  • LocalEcho -- local echo flag (outgoing echo)
  • CommandEcho -- command echo (incoming commands)
  • FullNames -- print fully qualified names?
  • FrontDelim -- use a front | in arrays?
  • Timeout -- timeout for implicit delay in /dquery and /dobserve commands
  • ObserveDelay -- delay between observe broadcasts (in ms)
  • Keepalive -- keepalive time for non-responding peers (in ms)
  • PeerCount -- number of connected peers
  • Peers -- list of connected peers
  • GroupCount -- number of all groups
  • Groups -- list of all groups
  • JoinedCount -- number of joined groups
  • Joined -- list of joined groups
  • O Observe -- observe accessor, accessed like: ${DanNet[peer_name].Observe[query]}
  • Q Query -- query accessor, for last executed query

Both Observe andQueryare their own data types, which provide aReceivedmember to determine the last received timestamp, or 0 for never received. Used like${DanNet.Q.Received}`

INI entries (MQ2DanNet.ini)
  • [General]
    • Groups -- |-delimited list of groups for all characters to auto-join, default empty
    • Debugging -- on/off/true/false boolean for debugging output, default off
    • Local Echo -- on/off/true/false boolean for local echo, default on
    • Command Echo -- on/off/true/false boolean for remote and local command (/dgex, &c) output, default on
    • Full Names -- on/off/true/false boolean for displaying fully-qualified names (on means that all names are displayed as server_character), default on
    • Front Delimiter -- on/off/true/false boolean for putting the | at the front for the TLO output of DanNet.Peers &c, default off
    • Query Timeout -- timeout string for implicit delay in /dquery and /dobserve, default is 1s
    • Observe Delay -- delay in milliseconds for observation evaluations to be sent, default is 1000
    • Keepalive -- timeout in milliseconds before an unresponsive peer is dropped, default is 30000
    • Tank -- short-name class list to auto-join the tank channel, default is war|pal|shd|
    • Priest -- short-name class list to auto-join the priest channel, default is clr|dru|shm|
    • Melee -- short-name class list to auto-join the melee channel, default is brd|rng|mnk|rog|bst|ber|
    • Caster -- short-name class list to auto-join the caster channel, default is nec|wiz|mag|enc|
  • [server_character]
    • Groups -- |-delimited list of groups for this specific character to auto-join, default empty
 
Last edited:
Joined
Feb 16, 2018
Likes
15
RedCents
399¢
#3
So i'm curious. Is this a plugin written to control multiple clients on the same subnet for the purpose of playing on your own emu server?
 

dannuic

Well-known member
Joined
Sep 12, 2004
Likes
60
RedCents
4,478¢
#4
So i'm curious. Is this a plugin written to control multiple clients on the same subnet for the purpose of playing on your own emu server?
No, this is more towards the purpose of coordinating all of your clients, and providing an interface for remote execution of commands without needing a server.
 
Joined
Jul 1, 2015
Likes
20
RedCents
465¢
#5
/dinfo shows as not a valid command =(
 

Maskoi

So old and salty he grew scales
Staff member
Joined
Sep 28, 2005
Likes
318
RedCents
64,533¢
#7
Code:
check the output of /dnet info interface
set one of the discovered interface names with /dnet info interface <name>
so is this the correct command?
 

dannuic

Well-known member
Joined
Sep 12, 2004
Likes
60
RedCents
4,478¢
#8
ahh, it's actually just `/dnet interface` and `/dnet interface <name>` sorry, forgot to update that bit -- updated now
 

joojoobee

A Member to Remember
Joined
May 15, 2016
Likes
21
RedCents
1,333¢
#11
Can we get some actual examples? For instance, what is the sequence of commands to "observe" whether another character is targetting something? Or whether it has a given buff?

I tried a few iterations but I am clearly too stupid to understand the explanations.

Thx.
JJB
 
Top