#!/usr/bin/python3
#
# BOTLIB Framework to program bots
#
# botlib/bot.py
#
# Copyright 2017 B.H.J Thate
# 
# Permission is hereby granted, free of charge, to any person obtaining a copy 
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights 
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
# copies of the Software, and to permit persons to whom the Software is 
# furnished to do so, subject to the following conditions:
# 
# The above copyright notice and this permission notice shall be included in 
# all copies or substantial portions of the Software.
# 
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 
# THE SOFTWARE.
#
# Bart Thate
# Heerhugowaard
# The Netherlands

""" udp client program. """

import os; import sys; sys.path.insert(0, os.getcwd())

from botlib.trace import get_exception
from botlib.utils import strip_html
from botlib.template import udp

import logging
import select
import socket

def out(txt):
    """ output text to the bot. """
    txt = strip_html(txt)
    data = '%s %s' % (udp.password, txt.strip())
    sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.sendto(bytes(data, "utf-8"), (udp.host, udp.port))

def main():
    """ listen on stdin and forward received data to the bot. """
    while 1:
        (i, o, e) = select.select([sys.stdin], [], [sys.stderr,])
        if e:
            break
        stop = False
        for sock in i:
            try:
                txt = sock.readline()
                if not txt:
                    stop = True
                    break
                out(txt)
            except:
                logging.error(get_exception())
        if stop:
            break

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        pass

