00001 from twisted.internet.protocol import Protocol, ClientFactory
00002 from twisted.internet import gtk2reactor
00003 gtk2reactor.install()
00004 from twisted.internet import reactor, defer
00005 from clientVars import *
00006 from Messages import Messages
00007 from urllib import quote_plus, unquote_plus
00008 from Users import Users, User
00009
00010 class clientProtocol(Protocol):
00011
00012 def connectionMade(self):
00013 self.factory.log.log("You are connected to the server!\n")
00014 self.initinit = True
00015 self.messagemessage = 0;
00016 d = self.sendMessagessendMessages();
00017 d.addCallback(self.sendMessagessendMessages);
00018
00019 def dataReceived(self, data):
00020 if self.initinit:
00021 self.factory.log.log("********** SERVER MESSAGE **********")
00022 block = data.split("\r\n\r\n")
00023 welcome = block[0]
00024 self.factory.log.log(welcome)
00025
00026 connData = block[1]
00027 connData = connData.split("\r\n");
00028 for lines in connData:
00029 if lines[0:3] == "UID":
00030 params = lines.split(" ")
00031 self.factory.Users.usersEver = params[2]
00032 self.factory.Users.usersOnline = params[3]
00033 self.factory.Users.addUser(params[1], self.factory.alias)
00034 self.factory.log.log("There are currently " + params[3] + " users online. This server had " + params[2] + " logins\n")
00035 self.factory.log.log("********** JOINING CHAT **********")
00036 self.sendMsgsendMsg("USER " + self.factory.alias)
00037 self.initinit = False
00038 else:
00039 if data[0:7] == "USER OK":
00040 self.factory.log.log("You've succesfully authenticated yourself on the server\n")
00041 self.sendMsgsendMsg("JOIN CHAT")
00042 elif data[0:9] == "JOIN CHAT":
00043 block = data.split("\r\n\r\n")
00044 params = block[0].split(" ")
00045 try:
00046 ID = params[3]
00047 except:
00048 self.factory.log.log("You've joined the chat as " + self.factory.alias + "\n")
00049 return
00050 try:
00051 name = params[4]
00052 name = name.split("\n")
00053 self.factory.log.log(name[0] + " joined the chat!\n" )
00054 if name[0] == self.factory.alias:
00055 self.sendMsgsendMsg("USERLIST")
00056 except:
00057 name[0]= "NameNotSet";
00058 self.factory.Users.addUser(ID, name[0], True)
00059
00060 elif data[0:8] == "CONN UID":
00061 params = data.split(" ")
00062 elif data[0:13] == "MSG CHAT UID ":
00063 block = data.split("\r\n\r\n")
00064 params = block[0].split(" ")
00065 msg = params[4].split("\r\n");
00066 msg = msg[0]
00067 self.factory.log.log(self.factory.Users.getName(params[3]) + " >>> " + unquote_plus(msg) )
00068 else:
00069 self.factory.log.log("[" + str(self.factory.pid) + "] " +data)
00070
00071 def sendMessages(self):
00072 d= defer.Deferred()
00073 msglen = len(self.factory.messages.messages);
00074 if msglen != self.messagemessage:
00075 while self.messagemessage != msglen:
00076 self.sendMsgsendMsg("MSG CHAT " + quote_plus(self.factory.messages.messages[self.messagemessage]))
00077 self.messagemessage = self.messagemessage + 1
00078 d.callback("SEND MESSAGES")
00079 reactor.callLater(2, self.sendMessagessendMessages);
00080 return d;
00081
00082 def sendMsg(self, msg):
00083 self.factory.pid += 1
00084
00085 self.transport.write(msg + "\r\n\r\n")
00086
00087 class clientProtocolFactory(ClientFactory):
00088
00089 protocol = clientProtocol
00090
00091 def __init__(self, log, alias, msgObject):
00092 self.loglog = log
00093 self.messagesmessages = msgObject
00094 self.aliasalias = alias
00095 self.pidpid = 1
00096 self.UsersUsers = Users();
00097 self.UsersUsers.addUser("1", alias);
00098
00099 def clientConnectionFailed(self, reason, bla):
00100 self.loglog.log("Couldn't connect...\n")
00101
00102 def runReactor(host, port, log, alias, msgObject):
00103 f = clientProtocolFactory(log, alias, msgObject)
00104 reactor.connectTCP(host, port, f)
00105 reactor.run()
00106
00107 def stopReactor():
00108 reactor.stop()
00109