/// <summary>
 /// Displays the tutorial timeline animation sequence and fires off start game when finished
 /// </summary>
 public static void DisplayTutorial(socketHandler handler)
 {
     AddCommand(() => {
         GameObject.Find("Canvas").transform.Find("tutorial").gameObject.SetActive(true);
         PlayableDirector director = GameObject.Find("tutorialTimeline").GetComponent <PlayableDirector>();
         director.Play();
         director.stopped += (dir) => {
             handler.EmitStartGame();
         };
     });
 }
 /// <summary>
 /// 以指定的本机端口初始化服务器socket链接,并分别新开1个所有客户端的socket管理线程和1个所有客户端的socket消息监听线程
 /// </summary>
 /// <param name="ip">本机ip</param>
 /// <param name="port">机端口号</param>
 /// <param name="listenNum">允许的最大客户端连接数</param>
 /// <param name="listenFailHandler">监听端口失败时执行的委托</param>
 /// <param name="manageThreadHandler">管理客户端连接的所有socket集合的线程</param>
 /// <param name="listenThreadHandler">监听客户端消息的线程</param>
 /// <param name="errorMessageHandler">监听消息失败时执行的委托</param>
 /// <param name="succMessageHandler">收到客户端消息时执行的委托</param>
 /// <param name="ClientSocketList">客户端连接的所有socket集合的对象</param>
 public void socketServerInit(string ip, int port, int listenNum, stringHandler listenFailHandler, socketHandler socketHandler1, threadHandler manageThreadHandler, threadHandler listenThreadHandler, stringHandler errorMessageHandler, stringHandler succMessageHandler, List<Socket> ClientSocketList)
 {
     object[] object1 = startSocketServer(ip, port, listenNum);
     Socket StartSocket = (Socket)object1[0];
     //监听端口失败
     if (StartSocket == null)
     {
         listenFailHandler((string)object1[1]);
         return;
     }
     socketHandler1(StartSocket);
     manageConnectClient(ClientSocketList, StartSocket, manageThreadHandler, listenThreadHandler, errorMessageHandler, succMessageHandler);
 }
        /// <summary>
        /// 以指定ip和端口初始化客户端的socket连接,连接成功后会新增一个线程监听服务器的消息
        /// </summary>
        /// <param name="ip">服务器ip</param>
        /// <param name="port">服务器端口</param>
        /// <param name="connectFailHanlder">socket连接失败时执行的委托,参数为string</param>
        /// <param name="currentSocketHandler">socket连接成功时执行的委托,参数为socket</param>
        /// <param name="listenThreadHandler">监听消息线程的委托,参数为thread</param>
        /// <param name="errorMessageHandler">socket接收消息失败时执行的委托,参数为string</param>
        /// <param name="succMessageHandler">初始化成功后,接收到消息时执行的委托,参数为string</param>
        public void socketClientInit(string ip, int port, string encode, stringHandler connectFailHanlder, socketHandler currentSocketHandler, threadHandler listenThreadHandler, stringHandler errorMessageHandler, stringHandler succMessageHandler)
        {
            object[] object1 = connectToSocketServer(ip, port);
            Socket ClientSocket = (Socket)object1[0];
            //判断建立连接是否失败
            if (ClientSocket == null)
            {
                connectFailHanlder((string)object1[1]);
                return;
            }

            //建立连接成功后返回该socket对象,用于发送和接收消息
            currentSocketHandler(ClientSocket);

            //使用该socket对象监听服务器链接
            clentListenSocketMessage(ClientSocket, encode,
                (listenMessageThread) =>
                {
                    listenThreadHandler(listenMessageThread);
                },
                (receiveExc) =>
                {
                    errorMessageHandler(receiveExc);
                },
            (result) =>
            {
                succMessageHandler(result);
            });
        }