from twisted.internet.protocol import Protocol, Factory
from twisted.protocols.basic import LineReceiver
from twisted.internet import reactor
import socket
import sys
import MySQLdb
import json,requests
import base64
import time
#LineReceiver.MAX_LENGTH = 1024*1024*64

class MyChat(LineReceiver):
    def __init__(self):
        self.delimiter = "\n"
       

    def connectionMade(self):
        print "Got new client!"
        print self
        self.factory.clients.append(self)

    def connectionLost(self, reason):
        print "Lost a client!"
        self.factory.clients.remove(self)

    def lineReceived(self, line):
        print "Data recieved"
        print repr(line)
        #split the commands on the basis of } , using this you can handle multiple commands at a time
        combineddata=""
        combineddata = line.split('}')
        
        print "Data separetd on the basis of }"
        print combineddata
        
        print "array size"
       
        sizeof=len(combineddata)
        print sizeof
      
        if sizeof >= 1:
            for p in range (sizeof):
                a = combineddata[p].split(':',1)
                if len(a) > 1:
                    command = a[0]
                    content = a[1]+ "}"
                    if command == "demo":
                        self.join =content
                        decoded = json.loads(self.join)
                        json.dumps(decoded, sort_keys=True, indent=4)
                        inchatroomid=int(decoded['chatroomid'])
                        inuserid=int(decoded['userid'])
                        print "Inputs : "+str(inchatroomid)+ "and" + str(inuserid)
                        
                        datajson = {'chatroomid' : 1, 'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userstatus':'A','userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'userid' : 2 ,'chatid' : 3 ,'comment':'Hi Thank you','username':'OAB','userfirstname':'OAB','useranonymousname':'BLUE123','profilepic':'userprofilepic','chatdate':'2014:09:11','likecount':'0','likestatus':'0','commandtype':'demo','chat_type':'T','timezone':'settimezone','usertype':'A','dmlist':'[{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"},{"dmuserid": "7","dmusertype": "R"}{"dmuserid": "6","dmusertype": "R"]'}
                        msg= json.dumps(datajson, sort_keys=True, indent=4)
                        for c in self.factory.clients:
                            c.message(msg)

    def message(self, message):
        self.transport.write(message + '\n')

print "Iphone Chat server started"
factory = Factory()
factory.protocol = MyChat
factory.clients = []
reactor.listenTCP(232, factory)
reactor.listenTCP(236, factory)
reactor.run()

