Пример #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
        //----------------------------------------------------------------------------------------------------
        /// <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;
            }
        }
Пример #3
0
 //----------------------------------------------------------------------------------------------------
 /// <summary>
 /// 송신 : 스테이지 : 커스텀 데이터
 /// </summary>
 /// <param name="in_bits">커스텀 데이터</param>
 //----------------------------------------------------------------------------------------------------
 public void SendStageData( cBitStream in_bits )
 {
     cBitStream bits = new cBitStream();
     WriteOrder(		bits, eOrder.STAGE_DATA );
     bits.Write( in_bits.ToByteArray() );
     Send( bits );
 }
Пример #4
0
        ///----------------------------------------------------------------------------------------------------
        /// <summary>
        ///		Unity오브젝트를 갱신한다..(미완성)
        /// </summary>
        ///----------------------------------------------------------------------------------------------------
        public void UpdateUnityObject()
        {
            cBitStream bits = new cBitStream();

            WriteOrder( bits, eOrder.OBJECT_UPDATE );
            WriteResult( bits, eResult.SUCCESS );
            bits.Write( m_master );
            bits.Write( false );

            lock( cUnityObject.Instances )
            {
                foreach( KeyValuePair<uint,cUnityObject> entry in cUnityObject.Instances )
                {
                    cUnityObject value = entry.Value;
                    Type ctype = value.GetType();
                    NETCLASSAttribute cattribute = GetNetClassAttribute( ctype );
                    if( cattribute != null )
                    {
                        if( cattribute.IsSync( UnityEngine.Time.time )==false ) return;
                    }

                    FieldInfo finfo = ctype.GetField("m_id",BindingFlags.NonPublic|BindingFlags.Public|BindingFlags.Instance);
                    uint object_id = (uint)finfo.GetValue(value);
                    bits.Write( object_id, MAX_OBJECT_ID );

                    foreach( FieldInfo field in ctype.GetFields(BindingFlags.NonPublic|BindingFlags.Public|BindingFlags.Instance) )
                    {
                        if( m_master )
                        {
                            HOSTAttribute attrib=GetHostAttribute( field );
                            if( attrib != null )
                            {
                                bits.Write( field.GetValue(value), attrib.MaxSize, attrib.MaxPoint );
                            }
                        }
                        else
                        {
                            GUESTAttribute attrib=GetGuestAttribute( field );
                            if( attrib != null )
                            {
                                bits.Write( field.GetValue(value), attrib.MaxSize, attrib.MaxPoint );
                            }
                        }
                    }
                }
            }

            if( bits.Length > 0 )
            {
                Send( bits );
            }
        }