import socket
from threading import Thread
import time
import json

ADDRESS =('192.168.50.188',8)
g_socket_server= None
g_conn_poll = {}

def init():
    global  g_socket_server
    g_socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    g_socket_server.bind(ADDRESS)
    g_socket_server.listen(5)
    print('server start at: %s:%s' % ADDRESS)
    print('wait for connection...')

def accept_client():
    while True:
      client, info = g_socket_server.accept()
      thread = Thread(target=message_handle,args=(client,info))
      thread.setDaemon(True)
      thread.start()


def message_handle(client,info):
      global g_conn_poll
      client.sendall("connect server successfully!".encode(encoding='utf8'))
      while True:
        try:
          byte = client.recv(1024)
          msg=byte.decode(encoding='utf8')
          jd=json.loads(msg)
          cmd=jd['COMMAND']
          client_type=jd['client_type']
          if 'CONNECT'==cmd:
              g_conn_poll[client_type]=client
              print('on client connect:'+client_type,info)
          elif 'SEND_DATA'==cmd:
              print('recv client msg:'+client_type,jd['data'])
        except Exception as e:
            print(e)
            print("client offline  " + client_type)
            break

init()
while True:
  thread = Thread(target=accept_client)
  thread.setDaemon(True)
  thread.start()