public void OnReceivedMotionData( BvhDataHeader header, IntPtr data )
		{
			this.header = header;
			try
			{
				Marshal.Copy( data, this.data, 0, (int)header.DataCount );
				timeStamp = GetTimeStamp();
			}
			catch( Exception e )
			{
				Debug.LogException( e );
			}
		}
		public virtual void OnFrameDataReceived( IntPtr DataHeader, IntPtr data )
		{
			BvhDataHeader header = new BvhDataHeader();
			try
			{
				header = (BvhDataHeader)Marshal.PtrToStructure( DataHeader, typeof( BvhDataHeader ) );
			}
			catch( Exception e )
			{
				Debug.LogException( e );
			}
			
			int actorID = (int)header.AvatarIndex;			
			NeuronActor actor = null;
			// find active actor
			actor = FindActiveActor( actorID );
			if( actor != null )
			{
				// if actor is active
				actor.OnReceivedMotionData( header, data );
			}
			else
			{
				// find suspended actor
				actor = FindSuspendedActor( actorID );
				if( actor == null )
				{
					// if no such actor, create one
					actor = CreateActor( actorID );
				}
				
				actor.OnReceivedMotionData( header, data );
			}
		}