Beispiel #1
0
        /* 구분자 패킷 설계
         * 1) 크게 명령, 구분자, 데이터 3부분으로 나눈다
         * 2) 명령에 따라 데이터를 어떻게 해석할지 정한다
         * 3) 명령이 먼저 나온다
         * 4) 예시
         *    4-1) 명령의 종류 C : 채팅
         *                    S : 정해진 초 이후에 나를 해제
         *                    B : WinForm의 배경색
         *    4-2) 구분자 : |
         *    4-3) C|안녕하세요
         *         S|3
         *         B|Gold
         */

        /// <summary>
        /// 정해진 약속에 따라 패킷을 처리하는 함수
        /// </summary>
        /// <param name="srcData">클라이언트가 보내온 전체 데이터</param>
        /// <param name="sendClient">데이터를 보낸 클라이언트</param>
        void ProcessPacket(string srcData, SocketData sendClient)
        {
            string[] datas = srcData.Split(new char[] { '|' });
            switch (datas[0])
            {
            case "C":
                AddRecvListBox(String.Format("[채팅] [{0}] {1}", sendClient.ip, srcData));
                SendAllData(datas[1], sendClient);
                break;

            case "S":
            {
                AddRecvListBox(String.Format("[해제] [{0}] {1}", sendClient.ip, srcData));
                int sec = Int32.Parse(datas[1]);
                // 정해진 초 후에 처리할 스레드에 전달할 인자
                SocketCloseData scd = new SocketCloseData();
                scd.client = sendClient;
                scd.sec    = sec;
                Thread tClose =
                    new Thread(new ParameterizedThreadStart(ThreadClose));
                tClose.Start(scd);
            }
            break;

            case "B":
                AddRecvListBox(String.Format("[배경] [{0}] {1}", sendClient.ip, srcData));
                Color color = Color.FromName(datas[1]);
                this.BackColor = color;
                break;
            }
        }
Beispiel #2
0
        void ThreadClose(object s)
        {
            SocketCloseData scd = (SocketCloseData)s;

            Thread.Sleep(scd.sec * 1000);
            DeleteClientAddressFromListView(scd.client);
            DeleteClientFromList(scd.client);
        }
Beispiel #3
0
        void ThreadClose(object s)
        {
            SocketCloseData scd = (SocketCloseData)s;

            Thread.Sleep(scd.sec * 1000);
        }