A flockr represents a user in the framework. A flockr has exactly one profile and can create and be registered to multiple flocks. In addition, a flockr can have multiple installed applications. A flockr is also the gateway that remote parties can use to get information about the user.
Each Flockr contains following info :
A Flockr has a local and remote interface. The remote interface is the entity that gets exported to the ambient.
Profile won't get exported to the ambient but it has to proactively asked to the Flockr. This allows: 1) Remote Flockr does not need to ask the Profile again (if you rediscover the Flockr) if it didn't change and 2) allow the Flockr to decide who can actually see its Profile.
The remote interface receives 3 types events from the network (join, left and changeProfile) and notifies the local interface of the Flockr which notifies the necessary Characteristic Function objects.
The local interface contains also receives the events on changes on the buddyList.
The buddyList is a list of its friends Flockrs. The editor for flocks will allow that the Profile can be consulted offline. When a Flockr is connected for which there is a cached Profile, he should propagate the necessary changed events to make sure that both the cached Profile and the Flocks of the other Flockrs are updated.
Flockr actually should be able to decide who can see him. How? maybe Profile?
registerProximity(proximityObj) friendAdded(uid,flockr) friendRemoved(uid,flockr)
joined(uid,flockr) left(uid,flockr) changedProfile(uid,flockr,updatedProfile) getProfile()