mirror of https://github.com/dirtbags/moth.git
34 lines
880 B
Python
34 lines
880 B
Python
|
#! /usr/bin/env python3
|
||
|
|
||
|
import asynchat
|
||
|
import asyncore
|
||
|
import socket
|
||
|
|
||
|
class Flagger(asynchat.async_chat):
|
||
|
"""Connection to flagd"""
|
||
|
|
||
|
def __init__(self, addr, auth):
|
||
|
asynchat.async_chat.__init__(self)
|
||
|
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
self.connect((addr, 6668))
|
||
|
self.push(auth + b'\n')
|
||
|
self.flag = None
|
||
|
|
||
|
def handle_read(self):
|
||
|
msg = self.recv(4096)
|
||
|
raise ValueError("Flagger died: %r" % msg)
|
||
|
|
||
|
def handle_error(self):
|
||
|
# If we lose the connection to flagd, nobody can score any
|
||
|
# points. Terminate everything.
|
||
|
asyncore.close_all()
|
||
|
asynchat.async_chat.handle_error(self)
|
||
|
|
||
|
def set_flag(self, team):
|
||
|
if team:
|
||
|
eteam = team.encode('utf-8')
|
||
|
else:
|
||
|
eteam = b''
|
||
|
self.push(eteam + b'\n')
|
||
|
self.flag = team
|