Example #1
0
def syn_thread():
    # return
    syn_time = time.time()
    while True:
        now = time.time()
        if now - syn_time > 5:
            syn_time = now
            for filename in Files.file_list:
                reply = dict()
                reply['type'] = 'syn'
                reply['content'] = Files.edit_file(filename)
                print reply['content']
                for skt in Files.editing[filename]:
                    send(skt, json.dumps(reply))
Example #2
0
def tcp_link(skt, addr):
    print('Accept new connection from %s:%s...' % addr)
    # sock.send(b'Welcome!')
    data = ''
    login = 0
    upload_filename = ''
    while True:
        if not skt:
            break
        data = data + skt.recv(1024)
        # time.sleep(1)
        if not data or data.decode('utf-8') == 'exit':
            break

        # sendToAll(skt, data)
        # data = ''
        while True:
            try:
                pos = data.index('\n')
            except:
                break
            print [data[:pos]]
            msg = json.loads(data[:pos])

            reply = dict()
            query = msg['type']
            reply['type'] = query

            if query == 'register':
                error = Users.insert_user(msg['user'], msg['password'])
                reply['error'] = error
                send(skt, json.dumps(reply))

            elif query == 'login':
                username = msg['name']
                u = Users.get_user(username)
                if len(u) < 2:
                    error = 1
                elif u[2] != hash(msg['password']):
                    error = 1
                else:
                    error = 0
                    login = 1
                    onlineList.append(skt)
                    name_list[skt] = username
                reply['error'] = error
                send(skt, json.dumps(reply))

            elif login == 0:
                continue

            if query == 'logout':
                login = 0
                onlineList.remove(skt)
                break

            elif query == 'create':
                filename = msg['filename']
                error = Files.create_file(filename)
                reply['error'] = error
                if error == 0:
                    Auth.change(filename, name_list[skt], 2, name_list[skt])
                send(skt, json.dumps(reply))

            elif query == 'edit':
                filename = msg['filename']
                if not Files.exist(filename):
                    reply['error'] = 1
                    send(skt, json.dumps(reply))
                    continue
                if not Auth.have_edit_auth(filename, name_list[skt]):
                    reply['error'] = 2
                    send(skt, json.dumps(reply))
                    continue
                reply['error'] = 0
                send(skt, json.dumps(reply))
                reply.clear()
                reply['type'] = 'edit_content'
                reply['filename'] = 'filename'
                reply['isend'] = 1
                content = dict()
                content['oldRange'] = {'start': {'row': 0, 'column': 0}, 'end': {'row': 0, 'column': 0}}
                content['oldText'] = ''
                (file_content, r, c) = Files.edit_file(filename)
                content['newText'] = file_content
                content['newRange'] = {'start': {'row': 0, 'column': 0}, 'end': {'row': r, 'column': c}}
                reply['content'] = content
                send(skt, json.dump(reply))

                Files.add_editor(filename, skt)

            elif query == 'upload':
                filename = msg['filename']
                error = Files.create_file(filename)
                reply['error'] = error
                send(skt, json.dumps(reply))
                if error == 1:
                    continue
                upload_filename = filename
                Auth.change(filename, name_list[sock], 2, name_list[skt])

            elif query == 'upload_content':
                if upload_filename == '':
                    continue
                Files.up_file(upload_filename, msg['content']['newText'])
                upload_filename = ''
                pass

            elif query == 'change_auth':
                filename = msg['filename']
                other_name = msg['other_name']
                if not Files.exist(filename):
                    reply['error'] = 1
                    send(skt, json.dumps(reply))
                    continue
                if not Auth.have_manage_auth(filename, other_name):
                    reply['error'] = 2
                    send(skt, json.dumps(reply))
                    continue
                reply['error'] = 0
                Auth.change(filename, other_name, msg['auth'])
                send(skt, json.dumps(reply))
                pass

            elif query == 'rm':
                filename = msg['filename']
                if not Files.exist(filename):
                    reply['error'] = 1
                    send(skt, json.dumps(reply))
                    continue
                if not Auth.have_manage_auth(filename, name_list[skt]):
                    reply['error'] = 2
                    send(skt, json.dumps(reply))
                    continue
                reply['error'] = 0
                Files.delete_file(filename)
                send(skt, json.dumps(reply))

            elif query == 'ls':
                reply['list'] = Auth.get_edit_list(name_list[skt])
                send(skt, json.dumps(reply))
                pass

            elif query == 'close':
                Files.del_editor(msg['filename'], skt)

            elif query == 'modify':
                modify = msg['content']
                filename = msg['filename']
                send_to_all(skt, json.dumps(modify), filename)
                Files.change_file(filename, modify)

    skt.close()
    print('Connection from %s:%s closed.' % addr)
Example #3
0
def tcp_link(skt, addr):
    syn_time = time.time()
    # try:
    print('Accept new connection from %s:%s...' % addr)
    global cnt
    cnt += 1
    data = ''
    login = 0
    while True:
        if not skt:
            break
        data = data + skt.recv(1024)
        # time.sleep(1)
        if not data or data.decode('utf-8') == 'exit':
            break

        # sendToAll(skt, data)
        # data = ''
        while True:
            try:
                pos = data.index('\n')
            except:
                break
            # print [data[:pos]]
            msg = json.loads(data[:pos])
            data = data[pos + 1:]

            reply = dict()
            query = msg['type']
            reply['type'] = query
            # if msg['type'] == 'modify':
            #     print msg['newText']

            if query == 'login':
                pwd = msg['pwd']
                if pwd != host_pwd:
                    error = 1
                else:
                    error = 0
                    login = 1
                    online_list.append(skt)
                    Files.add_editor(host_filename, skt)
                    reply['content'] = Files.edit_file(host_filename)
                reply['error'] = error
                send(skt, json.dumps(reply))

            elif login == 0:
                continue

            if query == 'logout':
                login = 0
                break

            elif query == 'modify':
                modify = msg
                print modify
                filename = host_filename
                # print Files.editing[host_filename]
                send_to_all(skt, json.dumps(msg), host_filename)
                print '=========================='
                print Files.edit_file(host_filename)
                Files.change_file(filename, modify)
                print '====>'
                print Files.edit_file(host_filename)
                print '=========================='

            elif query == 'move':
                msg['id'] = cnt
                send_to_all(skt, json.dumps(msg), host_filename)
                # now = time.time()
                # if now - syn_time > 5:
                #     print 'syn'
                #     syn_time = now
                #     reply = dict()
                #     reply['type'] = 'syn'
                #     reply['content'] = Files.edit_file(host_filename)
                #     send(skt, json.dumps(reply))

    save_all()
    Files.del_editor(host_filename, skt)
    online_list.remove(skt)
    skt.close()
    del lock[skt]
    print('Connection from %s:%s closed.' % addr)