void
UDPKinectSkeleton::_onPollingUDP(const Scheduler::PollingEvent & event)
{
StlString str;
unsigned int ipAddr;
int port;
ArRef<MemoryBlock> memory = MemoryBlock::NEW();
while(_udp->receiveBytes(memory,ipAddr,port))
  {
  if (_skeleton.valid())
    {
    ArRef<MemoryIStream> stream = MemoryIStream::NEW(memory,0);
    unsigned int nbJoints;
    stream->readUInt(nbJoints);
    if (nbJoints != _skeleton->getNbJoints())
      { 
      cerr<<"Reads "<<nbJoints<<" joints but skeleton has "
           <<_skeleton->getNbJoints()<<"joints !!! using the min"<<endl; }
    SerializationDependencies dependencies;
    for (unsigned int i(0); i<std::min(nbJoints,_skeleton->getNbJoints()) ;++i)
      {
      ArRef<Joint> joint = _skeleton->accessJoint(i);
      joint->unserialize(dependencies,stream);
      }
    int confidencesSize;
    stream->readInt(confidencesSize);
    for (unsigned int i(0); i<confidencesSize; ++i)
      {
      StlString name;
      stream->readString(name);
      double value;
      stream->readDouble(value);
      _confidences[name] = value;
      }
    }
  }
}