#! /usr/bin/env python
# -*- coding: Utf-8 -*-

# Üzenetek párhuzamos küldését és fogadását kezelő hálózati kliens definiálása
# (2 THREAD alkalmazása).

host = '127.0.0.1'
port = 40000

import socket, sys, threading

class ThreadReception(threading.Thread):
    """üzenetek fogadását kezelő thread-objektum"""
    def __init__(self, conn):
        threading.Thread.__init__(self)
        self.connection = conn           # a kapcsolat socketjének hivatkozása
        
    def run(self):
        while 1:
            message_received = self.connection.recv(1024)
            print "*" + message_received + "*"
            if message_received =='' or message_received.upper() == "FIN":
                break
        # A <reception> thread itt ér véget.
        # Kényszerítjük az <émission> thread zárását :
        th_E._Thread__stop()
        print "A kliens leállt. Megszakadt a kapcsolat."
        self.connection.close()
    
class ThreadEmission(threading.Thread):
    """üzenetek kibocsátását kezelő thread-objektum"""
    def __init__(self, conn):
        threading.Thread.__init__(self)
        self.connection = conn           # a kapcsolat socketjének hivatkozása
        
    def run(self):
        while 1:
            message_emitted = raw_input()
            self.connection.send(message_emitted)

# Főprogram - A kapcsolat létrehozása :
connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
    connection.connect((host, port))
except socket.error:
    print "A kapcsolat meghiúsult."
    sys.exit()    
print "A kapcsolat létrejött a server-rel."
            
# Párbeszéd a server-rel : két thread-et indítunk az üzenetküldés  
# és fogadás független kezeléséhez
th_E = ThreadEmission(connection)
th_R = ThreadReception(connection)
th_E.start()
th_R.start()

