コード例 #1
0
        //----------------------------------------------------------------------------------------------------
        /// <summary>
        /// 데이터 수신 처리
        /// </summary>
        /// <param name="client">cClient 인스턴스</param>
        /// <param name="data">수신 데이터</param>
        /// <param name="size">수신 데이터 크기</param>
        //----------------------------------------------------------------------------------------------------
        void OnRecv( cClient client, byte[] data, int size )
        {
            if( client.UseCryptogram ) data = cCryptogram.Decrypt( data, size, client.DataIV, client.DataKey );

            cBitStream bits = new cBitStream();
            bits.Write( data, 0, size );
            bits.Position = 0;

            cNetwork.eOrder order	= cNetwork.ReadOrder( bits );
            cNetwork.eResult result = cNetwork.ReadResult( bits );

            if( result != cNetwork.eResult.SUCCESS )
            {
                Error( order + " : " + result + " : \n" + bits.ToString() );
            }
            else
            {
                Print( order + " : " + result + " : \n" + bits.ToString() );
            }

            switch( order )
            {
            case cNetwork.eOrder.SERVER_LOGIN:				RecvServerLogin( result, bits );			break;
            case cNetwork.eOrder.SERVER_IN:					RecvServerIn( result, bits );				break;
            case cNetwork.eOrder.SERVER_OUT:				RecvServerOut( result, bits );				break;
            case cNetwork.eOrder.CLIENT_INFO_DEFAULT:		RecvClientInfoDefault( result, bits );		break;
            case cNetwork.eOrder.CHANNEL_LIST:				RecvChannelList( result, bits );			break;
            case cNetwork.eOrder.CHANNEL_IN:				RecvChannelIn( result, bits );				break;
            case cNetwork.eOrder.CHANNEL_OUT:				RecvChannelOut( result, bits );				break;
            case cNetwork.eOrder.CHANNEL_CHAT:				RecvChannelChat( result, bits );			break;
            case cNetwork.eOrder.PARTY_CHAT:				RecvPartyChat( result, bits );				break;
            case cNetwork.eOrder.STAGE_LIST:				RecvStageList( result, bits );				break;
            case cNetwork.eOrder.STAGE_IN_REQUEST:			RecvStageInRequest( result, bits );			break;
            case cNetwork.eOrder.STAGE_IN_ACCEPT:			RecvStageInAccept( result, bits );			break;
            case cNetwork.eOrder.STAGE_USER_IN:				RecvStageUserIn( result, bits );			break;
            case cNetwork.eOrder.STAGE_USER_OUT:			RecvStageUserOut( result, bits );			break;
            case cNetwork.eOrder.STAGE_USER_MOVE:			RecvStageUserMove( result, bits );			break;
            case cNetwork.eOrder.STAGE_USER_ATTACK_MONSTER:	RecvStageUserAttackMonster( result, bits );	break;
            case cNetwork.eOrder.STAGE_USER_SKILL_SELF:		RecvStageUserSkillSelf( result, bits );		break;
            case cNetwork.eOrder.STAGE_USER_SKILL_MONSTER:	RecvStageUserSkillMonster( result, bits );	break;
            case cNetwork.eOrder.STAGE_USER_SKILL_POS:		RecvStageUserSkillPos( result, bits );		break;
            case cNetwork.eOrder.STAGE_USER_DAMAGE:			RecvStageUserDemage( result, bits );		break;
            case cNetwork.eOrder.STAGE_USER_ITEM_USE_SELF:	RecvStageUserItemUseSelf( result, bits );	break;
            case cNetwork.eOrder.STAGE_USER_TRIGGER_ON:		RecvStageUserTriggerOn( result, bits );		break;
            case cNetwork.eOrder.STAGE_MON_IN:				RecvStageMonIn( result, bits );				break;
            case cNetwork.eOrder.STAGE_MON_MOVE:			RecvStageMonMove( result, bits );			break;
            case cNetwork.eOrder.STAGE_MON_ATTACK_USER:		RecvStageMonAttackUser( result, bits );		break;
            case cNetwork.eOrder.STAGE_MON_SKILL_SELF:		RecvStageMonSkillSelf( result, bits );		break;
            case cNetwork.eOrder.STAGE_MON_SKILL_ACTOR:		RecvStageMonSkillUser( result, bits );		break;
            case cNetwork.eOrder.STAGE_MON_SKILL_POS:		RecvStageMonSkillPos( result, bits );		break;
            case cNetwork.eOrder.STAGE_MON_DAMAGE:			RecvStageMonDemage( result, bits );			break;
            case cNetwork.eOrder.STAGE_DATA:				RecvStageData( result, bits );				break;
            default:
                client.Disconnect();
                break;
            }
        }
コード例 #2
0
ファイル: cClient.cs プロジェクト: jhl1130/BluemoonServer
        //----------------------------------------------------------------------------------------------------
        /// <summary>
        /// 수신된 데이터를 파싱한다.
        /// 주의 : 이 함수는 상속 받아서 클라이언트마다 각자 프로토콜을 정의해서 사용한다.
        /// </summary>
        /// <param name="client">수신 클라이언트</param>
        /// <param name="data">수신 데이터</param>
        /// <param name="size">수신 데이터 크기</param>
        //----------------------------------------------------------------------------------------------------
        protected virtual void OnRecv( cClient client, byte[] data, int size )
        {
            cBitStream bits = new cBitStream();
            bits.Write( data, 0, size );

            Print( bits.ToString() );

            eOrder	order	= ReadOrder( bits );
            eResult	result	= ReadResult( bits );

            Print( order + " : '"+client.Name+"'" );

            // 파싱
            switch( order )
            {
            case eOrder.OBJECT_UPDATE:
                RecvObjectUpdate( client, result, bits );
                break;
            default:
                Error( client.Name + ":" + order );
                break;
            }
        }