All pastes #807803 Raw Edit

Stuff

public text v1 · immutable
·published 2007-12-07 00:57 UTC
rendered paste body
#! usr/bin/env python

"Import modules from python." 
import os, sys
import math, random

"Import the pygame module."
try:
    import pygame
    from pygame.locals import *
except ImportError:
    print 'This requires PyGame. You can download it at pygame.org.'

"Import pygu!"
try:
    import pygu
    from pygu.locals import *
except ImportError:
    print 'This requires PyGU.'


from socket import *
import socket as sock
import thread, time
import ConfigParser

class Cursor(pygu.gui.Cursor):

    def __init__(self):

        pygu.gui.Cursor.__init__(self, False)
        self.image = pygu.image.load('data/Mouse Cursor.bmp', True)
        self.cursor = pygu.image.load('data/Mouse Cursor.bmp', True)
        self.cursor2 = pygu.image.load('data/Text Cursor.bmp', True)

    def change_type(self, type):
        if type == 'text':
            self.image = self.cursor2
        if type == 'cursor':
            self.image = self.cursor

    def draw(self, surface):
        if pygame.mouse.get_focused():
            surface.blit(self.image, (self.rect[0], self.rect[1]-8))

def now():
    return time.strftime("%I:%M:%S %p",time.localtime())

def send():
    global nick
    if window.get_widget(1).text is not "":
        if window.get_widget(1).text.startswith('/me'):
            message = str("[" + now() + "]" + "  * " + nick +  window.get_widget(1).text[3:])
            if s.send(message):
                window.get_widget(1).text = ""
        elif window.get_widget(1).text.startswith('/nick '):
            oldnick = nick
            nick = window.get_widget(1).text[6:]
            sendadminote(oldnick + " is now known as " + nick)
            window.get_widget(1).text = ""
        else:
            message = str("[" + now() + "]" + "  <" + nick + "> " + window.get_widget(1).text)
            if s.send(message):
                window.get_widget(1).text = ""

def sendadminote(msg):
    s.sendto("[" + now() + "]" + "  * " + str(msg), addr)

def show_msg(msg):
    if not msg.startswith("New user: "):
        window.get_widget(0).add_message(msg)
    else:
        users.append(msg[10:])

def change_nick():
    global nick
    oldnick = nick
    nick = window.get_widget(2).text
    if nick is not oldnick:
        sendadminote(oldnick + " is now known as " + nick)

def ChatRead():
    while 1:
        data = s.recv(1024)
        show_msg(data)
        print `data`
    #s.close()
    return

def ChatWrite():
    while 1:
        s.send(data)
        time.sleep(0.1)
    s.close()
    return

def connect():
    window.get_widget(0).add_message("Connecting to: " + host + " at port " + str(port))
    draw()
    draw()
    s = socket(AF_INET, SOCK_STREAM)
    s.connect(addr)
    s.send("Name: " + nick)
    time.sleep(0.1)
    draw()
    
    thread.start_new(ChatRead, ())
    thread.start_new(ChatWrite, ())
    return s

def draw():

    screen.fill(BLUE_BG)
    window.render(screen)
    window.update(event)

    ren = font2.render("PyChat", 1, WHITE)
    screen.blit(ren, (256-ren.get_width()/2, -3))

    ren = font.render(now(), 1, BLACK)
    screen.blit(ren, (451, 36))
    ren = font.render(now(), 1, WHITE)
    screen.blit(ren, (450, 35))
    ren = font.render("Msg:", 1, BLACK)
    screen.blit(ren, (6, 352))
    ren = font.render("Msg:", 1, WHITE)
    screen.blit(ren, (5, 351))
    ren = font.render("Nick:", 1, BLACK)
    screen.blit(ren, (6, 379))
    ren = font.render("Nick:", 1, WHITE)
    screen.blit(ren, (5, 378))
    screen.blit(logo, (5, 5))

    cursor.update()
    cursor.draw(screen)

    pygame.display.flip()

pygame.init()


screen = pygu.display.screen((512, 400), 'Michael Burns - Python Powered Chat Program')
font = pygu.font.Font('data/GUI Font.TTF', 8)
font2 = pygu.font.Font('data/Title Font.ttf', 40)
window = pygu.gui.MainWindow()
window.add_widget(pygu.gui.InputBox(font=font, size=[206, 15], pos=[150, 200], fill_color=[25, 50, 125], text_color=WHITE, line_color=BLUE_BUTTON))

clock = pygame.time.Clock()
cursor = Cursor()
pygame.mouse.set_visible(0)
logo = pygu.image.load('data/python-powered-w-100x40.png')

while 1:

    clock.tick(60)

    event = pygame.event.poll()

    if event.type == QUIT:
        sys.exit()
    if event.type == KEYDOWN:
        if event.key == K_ESCAPE:
            pygame.quit()

        if event.key == K_RETURN or event.key == K_KP_ENTER:
            break

    if cursor.rect.colliderect(window.get_widget(0).rect):
        cursor.change_type('text')
    else:
        cursor.change_type('cursor')


    screen.fill(BLUE_BG)
    pygame.draw.rect(screen, [25, 50, 125], [90, 170, 326, 100])
    pygame.draw.rect(screen, BLUE_BUTTON, [90, 170, 326, 100], 1)
    window.render(screen)
    window.update(event)

    ren = font2.render("PyChat", 1, WHITE)
    screen.blit(ren, (256-ren.get_width()/2, -3))
    ren = font.render("Enter a Nickname:", 1, BLACK)
    screen.blit(ren, (257-ren.get_width()/2, 182))
    ren = font.render("Enter a Nickname:", 1, WHITE)
    screen.blit(ren, (256-ren.get_width()/2, 181))
    ren = font.render("Press Enter to continue", 1, BLACK)
    screen.blit(ren, (257-ren.get_width()/2, 226))
    ren = font.render("Press Enter to continue", 1, WHITE)
    screen.blit(ren, (256-ren.get_width()/2, 225))
    ren = font.render("Make sure you open \"Server.py\" before hitting enter.", 1, BLACK)
    screen.blit(ren, (257-ren.get_width()/2, 242))
    ren = font.render("Make sure you open \"Server.py\" before hitting enter.", 1, WHITE)
    screen.blit(ren, (256-ren.get_width()/2, 241))
    ren = font.render("Use \"Settings.ini\" to change the server and ports.", 1, BLACK)
    screen.blit(ren, (257-ren.get_width()/2, 252))
    ren = font.render("Use \"Settings.ini\" to change the server and ports.", 1, WHITE)
    screen.blit(ren, (256-ren.get_width()/2, 251))
    screen.blit(logo, (5, 5))

    nick = window.get_widget(0).text

    cursor.update()
    cursor.draw(screen)

    pygame.display.flip()


config = ConfigParser.ConfigParser()
config.read("settings.ini")

host = config.get("server", "host")
port = int(config.get("server", "port"))

# Set the socket parameters
host = host
port = port
buf = 1024
addr = (host, port)
users = []


window = pygu.gui.MainWindow()
window.add_widget(pygu.gui.MessageBox(font=font, size=[502, 290], pos=[5,50], fill_color=[25, 50, 125], text_color=WHITE, line_color=BLUE_BUTTON))
window.add_widget(pygu.gui.InputBox(font=font, size=[380, 15], pos=[40, 350], fill_color=[25, 50, 125], text_color=WHITE, line_color=BLUE_BUTTON))
window.add_widget(pygu.gui.InputBox(text=nick, font=font, size=[380, 15], pos=[40, 377], fill_color=[25, 50, 125], text_color=WHITE, line_color=BLUE_BUTTON))
window.add_widget(pygu.gui.Button(text="Send", font=font, command=send, size=[75, 20], pos=[429, 348], button_color=BLUE_BUTTON))
window.add_widget(pygu.gui.Button(text="Change", font=font, command=change_nick, size=[75, 20], pos=[429, 375], button_color=BLUE_BUTTON))

def ChatRead():
    while 1:
        data = s.recv(1024)
        show_msg(data)
        print `data`
    #s.close()
    return

def ChatWrite():
    while 1:
        s.send(data)
        time.sleep(0.1)
    s.close()
    return

# Create socket
try:
    window.get_widget(0).add_message("Connecting to: " + host + " at port " + str(port))
    draw()
    draw()
    s = socket(AF_INET, SOCK_STREAM)
    s.connect(addr)
    s.send("Name: " + nick)
    window.get_widget(0).add_message("Connected to: " + host + " at port " + str(port))
    time.sleep(0.1)
    sendadminote(nick + " joins the chat")
    draw()
    thread.start_new(ChatRead, ())
    thread.start_new(ChatWrite, ())
except sock.error, (error, text):
    t = "ERROR: " + text
    window.get_widget(0).add_message(str(t))
print s

while 1:

    clock.tick(60)

    event = pygame.event.poll()

    if event.type == QUIT:
        sendadminote(nick + " quit")
        #s.close()
        sys.exit()
    if event.type == KEYDOWN:
        if event.key == K_RETURN:
            if window.get_widget(1).selected:
                send()
            if window.get_widget(2).selected:
                change_nick()

    if cursor.rect.colliderect(window.get_widget(1).rect):
        cursor.change_type('text')
    elif cursor.rect.colliderect(window.get_widget(2).rect):
        cursor.change_type('text')
    else:
        cursor.change_type('cursor')

    draw()