static public void CallEvent(string objMgPath, string eventName, MulticastDelegate delgt, params object[] eventParams) { try { delgt.DynamicInvoke(eventParams); if (!PurviewMgr.IsMainHost) { object[] newparams = new object[eventParams.Length]; for (int i = 0; i < eventParams.Length; i++) { if (eventParams[i] is IGameObj) { newparams[i] = new GameObjSyncInfo(((IGameObj)eventParams[i]).MgPath); } else { newparams[i] = eventParams[i]; } } // 通过网络协议传递给主机 SyncCasheWriter.SubmitNewEvent(objMgPath, eventName, newparams); } } catch (Exception ex) { Log.Write(ex.ToString()); } }
public virtual bool Update(float second) { if (PurviewMgr.IsMainHost) { /* 1.更新场景物体 * 2.处理消息缓冲区 * 3.更新其他组件 * 4.广播同步消息 * */ GameManager.UpdateMgr.Update(second); // 处理消息缓冲区 SyncCasheReader.ReadCashe(sceneMgr); GameManager.UpdataComponent(second); // 广播同步消息 outputCashe.SendPackage(); SyncCasheWriter.Update(second); } else { /* 1.处理同步消息缓冲区 * 1.更新场景物体 其中会添加需要发送的同步消息 * 2.更新其他组件 * 3.发送同步消息 * */ GameManager.UpdateMgr.Update(second); GameManager.UpdataComponent(second); // 处理消息缓冲区 SyncCasheReader.ReadCashe(sceneMgr); // 发送同步消息 outputCashe.SendPackage(); SyncCasheWriter.Update(second); } return(false); }