Scripts:UDP Based Advert System

From BF2 Technical Information Wiki
Revision as of 05:37, 16 August 2005 by Dackz (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Introduction

There are many ways to implement an advert system in BF2. A good way would probably be to use the RCON interface. But another one that might be worth playing around with, is a solution where you create a dedicated advert port on the server, and send messages to it at will, using a suitable client.

Server Code

The idea is to let the server listen on a port bound to the 'localhost' interface, and read messages off that port, and post them to the players. The socket does of course need to be non-blocking, or it will interfere with the server. But I have no idea if the solution is to use a timer, like this code does. But this at least shows the consept:

import socket
import host
import bf2

port = 29600
addr = ('localhost',port)
bufsize = 1024

s = None
msgtimer = None

def init():
   global s, msgtimer
   print "Initializing the 'advert client' script."
   s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
   s.setblocking(0)
   s.bind(addr)
   msgtimer = bf2.Timer(read,1,1)
   msgtimer.setRecurring(1)


def read(data):
   if not s: return
   try:
      msg, client = s.recvfrom(bufsize)
   except:
      return False
   if msg:
      host.rcon_invoke("game.sayAll \"" + str(msg) + "\"")

Client Code

The client can be as easy or complex as anyone wish. This is the simplest possible client:

#!/usr/bin/env python
import socket

HOST = 'localhost'
PORT = 29600

print "Creating client socket."
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
print "Sending data to server."
s.sendto("Hi. I'm an advert client sending data to the server.", (HOST,PORT))
print "Closing socket."
s.close()
Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox