/// <summary> /// Initializes a new instance of the <see cref="SyncFrame.SFUDPActionSyncMachine`3"/> class. /// </summary> /// <param name="mgr">Mgr.</param> /// <param name="port">Port.</param> public SFUDPActionSyncMachine(T mgr, int port, int userID) { this.mgr = mgr; room.Init(port); room.CurUserID = userID; //client to set the userID //room.Connect("192.168.43.46", 3001); room.Connect("127.0.0.1", 3001); room.OnConnected += () => Debug.Log("OnConnected"); room.OnDisConnected += () => Debug.Log("OnDisConnected"); room.OnUserEnter += AddAgent; room.OnUserLeave += DelAgent; room.OnData += (x, reader) => { var header = reader.GetHeader(); SFUDPSyncMsg msg = (SFUDPSyncMsg)(header.Code); switch (msg) { case SFUDPSyncMsg.SyncEnd: SFUDPSyncFrameDataResponse data = reader.Get <SFUDPSyncFrameDataResponse>(); if (data.FrameID == curFrameID) { //Debug.Log("SyncEnd " + data.FrameID + " "); onResponse.OnNext(1); } break; case SFUDPSyncMsg.FrameDataRemote: case SFUDPSyncMsg.FrameData: SFUDPSyncFrameData <ActionType, ParamType> frame = reader.Get <SFUDPSyncFrameData <ActionType, ParamType> >(); if (frame != null) { UpdateAgent(frame); } break; default: Debug.Log("nohown msg " + msg.ToString() + " "); break; } }; room.Run(); // ObserveOnMainThread return to mainthread //Observable.Start(() => //{ // Run(); //}) // asynchronous work // .ObserveOnMainThread() // .Subscribe(x => Debug.Log(x)); }
/// <summary> /// Updates the agent. /// </summary> /// <param name="frame">Frame.</param> private void UpdateAgent(SFUDPSyncFrameData <ActionType, ParamType> frame) { Debug.Log("UpdateAgent " + room.CurUserID); int AgentID = frame.UID; var agent = agentList.Find(a => a.AgentID == AgentID); if (agent != null) { agent.UpdateFrame(frame.FrameData); } }