# -*- coding: utf-8 -*-
import sys
import time
import socket
from ssat_sdk.service import service_config
from ssat_sdk.sat_environment import *

DEVICE = {
    "RCU": "遥控器",
    "ATV": "ATV码流仪",
    "DTV": "DTV码流仪",
    "ccard": "视频采集卡",
    "voicecard": "音频采集卡",
    "signalcard": "信号仪1",
    "signalcard_2": "信号仪2",
    "ATV": "ATV码流仪",
}


# 异常客户端处理类;
class CAbnormalClient():
    # 构造函数
    def __init__(self):
        self.port = getTesterListenTcpPort()
        self.ip = '127.0.0.1'
        self.sock = socket.socket()
        self.sock.settimeout(100)
        self.socketOpen = False
        # socket.setdefaulttimeout(20)
        self.__OpenSocket(self.ip, self.port)

    # 析构函数
    def __def__(self):
        self.__CloseSocket()

    # 打开连接
    def __OpenSocket(self, ip="127.0.0.1", port=9660):
        try:
            status = self.sock.connect((ip, self.port))
            self.socketOpen = True
            return status != 0
        except Exception, e:
            print e
            self.socketOpen = False
            return False

    # 关闭链接
    def __CloseSocket(self):
        if self.socketOpen:
            self.sock.close()
            self.socketOpen = False
        else:
            print("\n\n\n \t\t Socket was to close.\n\n\n")

    # 发送消息
    def __ReadData(self, message):
        if not self.socketOpen:
            self.__CloseSocket()
            self.__OpenSocket()
            if not self.socketOpen:
                print("\tSocket has not been opened. Call 'OpenSocket()' first.")
                return

        # Send message
        self.sock.send((message + '\n').encode())
        received = ""

        # Check response. This is either a single line, e.g. "OK\n", or a multi-line response with
        # '{' and '}' start/end delimiters.
        while True:
            # Receives data
            received += self.sock.recv(64).decode()
            if self.__CheckEOM(received):
                return received

    # 检查是否到消息末端
    def __CheckEOM(self, message):
        # Multi-line message
        if ('{' in message):
            return ('}' in message)

        # Single line message
        if ("\n" in message):
            return True

    def sendAbnormal(self, device, msg):
        if not self.socketOpen:
            self.__CloseSocket()
            self.__OpenSocket()
            if not self.socketOpen:
                print("\tSocket has not been opened. Call 'OpenSocket()' first.")
                return False

        try:
            message = '{"deviceName":"' + device + '","errorInfo":"' + msg + '"}'
            # Send message
            self.sock.send(message)
        except Exception, e:
            self.__CloseSocket()
            print e
            return False
        # 不接收返回;
        self.__CloseSocket()
        return True


# 单例模块;
abnormal_client = CAbnormalClient()

if __name__ == "__main__":
    abnormal_client.sendAbnormal('RCU', '出错999995555555555559999999999999999999')