Пример #1
0
        /// <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));
        }
Пример #2
0
        /// <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);
            }
        }