rendered paste body#### CONFIG FILE ####
[server]
port: 4560
host: localhost
### CODE ####
#! usr/bin/env python
"Import modules from python."
import os, sys
import math, random
import ConfigParser
"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
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 = config.get("server", "port")
# Set the socket parameters
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()