/*
         * this function helps moving Recv Sessions to right Queue at DataFactory
         */
        public static void Handling()
        {
            CDataFactory DataFactory = CDataFactory.GetDataFactory();

            while (MainClass.IsRunning())
            {
                byte[] buffer = DataFactory.GetRecvBuffer();
                if (buffer == null)
                {
                    continue;
                }
                DH_log("working");

                PacketType packettype = Packet.GetPacketType(buffer);
                if (packettype == PacketType.Member_REGISTER_RESULT)
                {
                    MemberRegisterResult result = (MemberRegisterResult)Packet.Deserialize(buffer);
                    DataFactory.SetPopupBuffer(result.msg);
                }

                if (packettype == PacketType.Login_RESULT)
                {
                    LoginResult result = (LoginResult)Packet.Deserialize(buffer);
                    DataFactory.SetPopupBuffer(result.msg);
                }
                if (packettype == PacketType.Heart_Beat)
                {
                    DH_log("Received HB packet");
                    DataFactory.SetSendBuffer(buffer);
                    DH_log("Hearbeat received");
                }
            }
        }
Beispiel #2
0
        private void AnalyzePacket(byte[] buffer)
        {
            Packet packet = (Packet)Packet.Deserialize(buffer);

            if (packet == null)
            {
                return;
            }

            switch ((int)packet.packet_Type)
            {
            case (int)PacketType.Login_RESULT:
                // 3. receive the packet
                //int bytesRead = stream.Read(buffer, 0, buffer.Length);
                LoginResult loginResult = (LoginResult)Packet.Deserialize(buffer);

                if (loginResult.result)
                {
                    myid = loginResult.reason;
                    //MessageBox.Show(loginResult.reason, "클라이언트 확인", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    setLog("login success");
                    isLogined = true;
                    ChangePanel(isLogined);
                    GetUserTime();
                    StartTimer();
                }
                else
                {
                    setLog("login failed" + loginResult.reason);
                    MessageBox.Show(loginResult.reason, "클라이언트 오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

                break;

            case (int)PacketType.Member_REGISTER_RESULT:
                MemberRegisterResult mrResult = (MemberRegisterResult)Packet.Deserialize(buffer);

                if (mrResult.result)
                {
                    setLog("succeed register");// MessageBox.Show(mrResult.reason, "클라이언트 확인", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    setLog("failed register");
                    //MessageBox.Show(mrResult.reason, "클라이언트 오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                break;


            case (int)PacketType.GetTime:    // get time

                GetTime time = (GetTime)Packet.Deserialize(buffer);

                char     delimiter  = ':';
                String[] substrings = time.timeleft.Split(delimiter);
                TimeLeft.hour         = Convert.ToInt32(substrings[0]);
                TimeLeft.min          = Convert.ToInt32(substrings[1]);
                TimeLeft.sec          = Convert.ToInt32(substrings[2]);
                TimeLeft.allTimeValue = TimeLeft.hour * 3600 + TimeLeft.min * 60 + TimeLeft.sec;
                break;
            }
            //stream.Close();
        }
Beispiel #3
0
        private void AnalyzePacket(NetworkStream stream, byte[] buffer)
        {
            Packet packet = (Packet)Packet.Deserialize(buffer);

            if (packet == null)
            {
                return;
            }

            switch ((int)packet.packet_Type)
            {
            case (int)PacketType.Login:
            {
                // 받은 패킷을 Login class 로 deserialize 시킴
                Login login = (Login)Packet.Deserialize(buffer);

                setLog(string.Format("ID : {0}, PWD : {1}", login.id_str, login.pw_str));

                // 전송할 패킷을 LoginResult class 로 serialize 시킴
                LoginResult loginResult = new LoginResult();
                loginResult.packet_Type = (int)PacketType.Login_RESULT;
                string id = CheckLogin(login.id_str, login.pw_str);
                if (id.Length != 0)
                {
                    if (Utils.CheckTimeleft(GetTimeLeft(id)))
                    {
                        setLog(string.Format("Login : {0} ", login.id_str));
                        loginResult.result = true;
                        loginResult.reason = id;
                        AddUserToList(id, login.id_str);
                    }
                    else
                    {
                        loginResult.result = false;
                        setLog("failed Login");
                        loginResult.reason = "시간을 충전하세요";
                    }
                }
                else
                {
                    loginResult.result = false;
                    setLog("failed Login");
                    loginResult.reason = "아이디와 비밀번호를 확인 하시기 바랍니다.";
                }

                Array.Clear(buffer, 0, buffer.Length);
                Packet.Serialize(loginResult).CopyTo(buffer, 0);
                stream.Write(buffer, 0, buffer.Length);

                setLog("");
            }
            break;

            case (int)PacketType.Member_REGISTER:
            {
                // 받은 패킷을 MemberRegister class 로 deserialize 시킴
                MemberRegister memberRegister = (MemberRegister)Packet.Deserialize(buffer);

                setLog(string.Format("ID : {0}, PWD : {1}",
                                     memberRegister.id_str, memberRegister.pw_str));

                // 전송할 패킷을 LoginResult class 로 serialize 시킴
                MemberRegisterResult mrResult = new MemberRegisterResult();
                mrResult.packet_Type = (int)PacketType.Member_REGISTER_RESULT;
                if (InsertNeUser(memberRegister.id_str, memberRegister.pw_str))
                {
                    mrResult.result = true;
                    mrResult.reason = "회원 가입이 정상적으로 되었습니다.";
                    setLog(string.Format("succeed register : {0}", memberRegister.id_str));
                }
                else
                {
                    mrResult.result = false;
                    mrResult.reason = "회원가입 오류입니다.";
                    setLog("failed register");
                }

                Array.Clear(buffer, 0, buffer.Length);
                Packet.Serialize(mrResult).CopyTo(buffer, 0);
                stream.Write(buffer, 0, buffer.Length);

                setLog("");
            }
            break;

            case (int)PacketType.GetTime:    // get time
                // 받은 패킷을 MemberRegister class 로 deserialize 시킴
                GetTime gt = (GetTime)Packet.Deserialize(buffer);

                setLog(string.Format("request timeleft.{0}-{1}",
                                     gt.id_str, gt.timeleft));
                gt.timeleft = GetTimeLeft(gt.id_str);

                Array.Clear(buffer, 0, buffer.Length);
                Packet.Serialize(gt).CopyTo(buffer, 0);
                stream.Write(buffer, 0, buffer.Length);

                setLog("");
                break;

            case (int)PacketType.Logout:
                // 받은 패킷을 MemberRegister class 로 deserialize 시킴
                Logout lo = (Logout)Packet.Deserialize(buffer);

                setLog(string.Format("Logout:{0}- save tileleft {1}",
                                     lo.id_str, lo.timeleft));

                SaveUserTimeLeft(lo.id_str, lo.timeleft);
                RemoveListItem(lvUser, lo.id_str);
                Array.Clear(buffer, 0, buffer.Length);

                //LogoutResult lr = new LogoutResult();
                //lr.packet_Type = (int)PacketType.Logout_Result;
                //lr.result = true;
                //lr.reason = "normal";
                //Packet.Serialize(lr).CopyTo(buffer, 0);
                //stream.Write(buffer, 0, buffer.Length);
                break;
            }
            //stream.Close();
        }