#coding:utf-8

from flask import Blueprint ,Response,request
from configparser import ConfigParser

from lib.protocol.report.HeartBeatReport_protocol import HeartBeatReport_protocol
from lib.protocol.report.LoginReport_protocol import LoginReport_protocol
from lib.protocol.report.GPSReport_protocol import GPSReport_protocol
from lib.protocol.report.OBDReport_CAN_protocol import OBDReport_CAN_protocol
from lib.protocol.report.SecurityStatusReport_protocol import SecurityStatusReport_protocol
from lib.protocol.reportPlateform.Common_res import Common_res
from lib.protocol.reportPlateform.Login_res import Login_res

from lib.socket.ClientSocket import ClientSocket
import json
import traceback
import binascii

M_carSimulater_process = Blueprint('M_carSimulater_process', __name__)

#用来保存连接的信息
connects = []
#用来保存车机线程
threads = []

##########################################
#   【接口类型】设置socket信息
##########################################
@M_carSimulater_process.route("/porcessSocketSetting",methods=['POST'])
def porcessSocketSetting():
    host = request.form.get("host")
    port = request.form.get("port")

    data = {}
    if (host == None or port == None):
        data["status"] = "4003"
        data["message"] = "Info: 请检查是否传入了空数据!"
        return Response(json.dumps(data), mimetype='application/json')
    else:
        try:
            # d读取config文件
            conf_R = ConfigParser()
            conf_R.read("config/protocolTools/carSimulater.conf")
            conf_W = conf_R
            conf_W["socket"]["host"] = host
            conf_W["socket"]["port"] = port
            with open("config/protocolTools/carSimulater.conf", "w") as fi:
                conf_W.write(fi)
            data["status"] = "200"
            data["message"] = "Sucess: "
        except BaseException as e:
            # 打印异常信息
            traceback.print_exc()
            data["status"] = "4003"
            data["message"] = "Error: 处理失败!"
    return Response(json.dumps(data), mimetype='application/json')

##########################################
#   【接口类型】创建一个连接
##########################################
@M_carSimulater_process.route("/createConect",methods=['POST'])
def createConect():
    data = {}
    try:
        conf_R = ConfigParser()
        conf_R.read("config/protocolTools/carSimulater.conf")
        if len(connects) < 1:
            cliSocket = ClientSocket(conf_R.get("socket", "host"), conf_R.getint("socket", "port"))
            cliSocket.connect()
            connect = {}
            socketName = "socket_" + str(len(connects) + 1)
            connect["name"] = socketName
            connect["obj"] = cliSocket
            connects.append(connect)
            data["status"] = "200"
            data["message"] = "创建连接成功!"
        else:
            data["status"] = "4003"
            data["message"] = "已经创建了连接!"
    except BaseException as e:
        # 打印异常信息
        traceback.print_exc()
        data["status"] = "4003"
        data["message"] = "Error: 处理失败!"


##########################################
#   【接口类型】关闭一个连接
##########################################
@M_carSimulater_process.route("/closeConect",methods=['POST'])
def closeConect():
    data = {}
    try:
        if len(connects) < 1:
            data["status"] = "4003"
            data["message"] = "没有课关闭的连接!"
        else:
            connects[0]["obj"].close()
            connects.pop(0)
            data["status"] = "200"
            data["message"] = "关闭连接成功!"
    except BaseException as e:
        # 打印异常信息
        traceback.print_exc()
        data["status"] = "4003"
        data["message"] = "Error: 处理失败!"