public void RunViewUpdate()
{
if (!PhotonNetwork.connected || PhotonNetwork.offlineMode)
{
return;
}
if (this.mActors == null ||
#if !PHOTON_DEVELOP
this.mActors.Count <= 1
#endif
)
{
return; // No need to send OnSerialize messages (these are never buffered anyway)
}
dataPerGroupReliable.Clear();
dataPerGroupUnreliable.Clear();
/* Format of the data hashtable:
* Hasthable dataPergroup*
* [(byte)0] = this.ServerTimeInMilliSeconds;
* OPTIONAL: [(byte)1] = currentLevelPrefix;
* + data
*/
foreach (KeyValuePair<int, PhotonView> kvp in this.photonViewList)
{
PhotonView view = kvp.Value;
if (view.synchronization != ViewSynchronization.Off)
{
// Fetch all sending photonViews
if (view.isMine)
{
#if UNITY_2_6_1 || UNITY_2_6 || UNITY_3_0 || UNITY_3_0_0 || UNITY_3_1 || UNITY_3_2 || UNITY_3_3 || UNITY_3_4 || UNITY_3_5
if (!view.gameObject.active)
{
continue; // Only on actives
}
#else
if (!view.gameObject.activeInHierarchy)
{
continue; // Only on actives
}
#endif
if (this.blockSendingGroups.Contains(view.group))
{
continue; // Block sending on this group
}
// Run it trough its OnSerialize
Hashtable evData = this.OnSerializeWrite(view);
if (evData == null)
{
continue;
}
if (view.synchronization == ViewSynchronization.ReliableDeltaCompressed || view.mixedModeIsReliable)
{
if (!evData.ContainsKey((byte)1) && !evData.ContainsKey((byte)2))
{
// Everything has been removed by compression, nothing to send
}
else
{
if (!dataPerGroupReliable.ContainsKey(view.group))
{
dataPerGroupReliable[view.group] = new Hashtable();
dataPerGroupReliable[view.group][(byte)0] = this.ServerTimeInMilliSeconds;
if (currentLevelPrefix >= 0)
{
dataPerGroupReliable[view.group][(byte)1] = this.currentLevelPrefix;
}
}
Hashtable groupHashtable = dataPerGroupReliable[view.group];
groupHashtable.Add((short)groupHashtable.Count, evData);
}
}
else
{
if (!dataPerGroupUnreliable.ContainsKey(view.group))
{
dataPerGroupUnreliable[view.group] = new Hashtable();
dataPerGroupUnreliable[view.group][(byte)0] = this.ServerTimeInMilliSeconds;
if (currentLevelPrefix >= 0)
{
dataPerGroupUnreliable[view.group][(byte)1] = this.currentLevelPrefix;
}
}
Hashtable groupHashtable = dataPerGroupUnreliable[view.group];
groupHashtable.Add((short)groupHashtable.Count, evData);
}
}
else
{
// Debug.Log(" NO OBS on " + view.name + " " + view.owner);
}
}
else
{
}
}
//Send the messages: every group is send in it's own message and unreliable and reliable are split as well
RaiseEventOptions options = new RaiseEventOptions();
#if PHOTON_DEVELOP
options.Receivers = ReceiverGroup.All;
#endif
foreach (KeyValuePair<int, Hashtable> kvp in dataPerGroupReliable)
{
options.InterestGroup = (byte)kvp.Key;
this.OpRaiseEvent(PunEvent.SendSerializeReliable, kvp.Value, true, options);
}
foreach (KeyValuePair<int, Hashtable> kvp in dataPerGroupUnreliable)
{
options.InterestGroup = (byte)kvp.Key;
this.OpRaiseEvent(PunEvent.SendSerialize, kvp.Value, false, options);
}
}