AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Code Snippets/Tutorials (https://forums.alliedmods.net/forumdisplay.php?f=83)
-   -   [NATIVE] Server Comm (https://forums.alliedmods.net/showthread.php?t=150519)

Exolent[jNr] 02-19-2011 19:42

[NATIVE] Server Comm
 
4 Attachment(s)
Server Comm
Version 0.0.2
by Exolent



Introduction:

This idea is based on 2 or more servers sending data between each other and also making it very simple for the coders involved.
With this include, you need only 3 functions to be able to have your servers communicate however you want!


Requirements:

Engine Module
Sockets HZ Module


Sending Data:

To be able to even have data come in, someone has to send it.
Here is the first function to send data:
Code:
/*  * Sends data to a given IP  *  * @param      ip - The IP to send data to  * @param      data - The data to send  *  * @note        The port must be at the end of the IP address  * @note        To send data back to the same server, use "loopback" as the IP and no port at the end of it  *  * @return    Returns 1 on success, 0 on failure  *  */ native scomm_send(const ip[], const data[]);
Seems pretty straight-forward, right?
You send data to an IP address of the server you choose.

If you need to format the data for the send function, you don't have to format it into another variable and then send it.
Instead, you can use this function:
Code:
/*  * Sends formatted data to a given IP  *  * @param      ip - The IP to send data to  * @param      format - The format of the data  *  * @note        The port must be at the end of the IP address  * @note        To send data back to the same server, use "loopback" as the IP and no port at the end of it  *  * @return    Returns 1 on success, 0 on failure  *  */ native scomm_sendf(const ip[], const format[], any:...);
This reduces the formatting of the string to another variable and directly formats it into the send function.


Receiving Data:

To receive data from other servers, you need this forward in your plugin:
Code:
/*  * Called when the server receives data from another server  *  * @param      data - The string containing data  * @param      len - The length of the data  *  * @return    Return value is ignored  *  */ forward scomm_receive(data[], len);
That will provide you with the data that you received and the length of it.

Unfortunately, these functions cannot automatically detect the IP that the data is being sent from.
Therefore, if you want the IP to go to the receive function, you have to send the IP in the data you are sending to the server.


Notes:

The API plugin needs to be compiled with the sockets_hz.inc file attached to the bottom of this post.
Compiling locally: https://forums.alliedmods.net/showthread.php?t=130511


Be sure to set this cvar on servers running this plugin:
Code:

scomm_key "key"
The value of this cvar is used to protect the data being sent and received between servers.
If the value of this cvar does not match the value of the cvar on the server running Server Comm, then the data will be ignored.


All suggestions and comments are welcome.


Changelog:

Version 0.0.2
  • Modified to allow specific port listening and sending
  • Added "loopback" functionality to send data back to same server
Version 0.0.1
  • Original release

Exolent[jNr] 02-19-2011 19:43

Re: [NATIVE] Server Comm
 
Example Plugin(s) Using Server Comm:

Cross-Server Chatting

drekes 02-19-2011 21:32

Re: [NATIVE] Server Comm
 
Awesome

meTaLiCroSS 02-20-2011 00:31

Re: [NATIVE] Server Comm
 
3x013n7 y0u 4r3 7h3 m4n

ot_207 02-20-2011 15:22

Re: [NATIVE] Server Comm
 
Well what can I say this is a really nice example that shows how to use socket listen. Really neat job exolent.

xPaw 02-20-2011 15:54

Re: [NATIVE] Server Comm
 
This allows to send data even without a plugin, for example from php

ot_207 02-20-2011 15:58

Re: [NATIVE] Server Comm
 
Quote:

Originally Posted by xPaw (Post 1419906)
This allows to send data even without a plugin, for example from php

True, but can you send info from a server to a php page?

xPaw 02-20-2011 16:01

Re: [NATIVE] Server Comm
 
Quote:

Originally Posted by ot_207 (Post 1419909)
True, but can you send info from a server to a php page?

You can pass your data in GET

LaineN 02-20-2011 17:22

Re: [NATIVE] Server Comm
 
What if you want to send data between servers on the same IP but on different ports?

mabaclu 02-20-2011 17:26

Re: [NATIVE] Server Comm
 
Quote:

Originally Posted by LaineN (Post 1419986)
What if you want to send data between servers on the same IP but on different ports?

x2

Nice job but please fix Linux link.


All times are GMT -4. The time now is 13:39.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.