Dispatch
How do I use Dispatch
Below are practical examples compiled from projects for learning and reference purposes
Featured Snippets
File name: PhotonHandler.cs
Copy
59 protected void Update()
60 {
61 if (PhotonNetwork.networkingPeer == null)
62 {
63 Debug.LogError("NetworkPeer broke!");
64 return;
65 }
66
67 if (PhotonNetwork.connectionStateDetailed == PeerState.PeerCreated || PhotonNetwork.connectionStateDetailed == PeerState.Disconnected || PhotonNetwork.offlineMode)
68 {
69 return;
70 }
71
72 // the messageQueue might be paused. in that case a thread will send acknowledgements only. nothing else to do here.
73 if (!PhotonNetwork.isMessageQueueRunning)
74 {
75 return;
76 }
77
78 bool doDispatch = true;
79 while (PhotonNetwork.isMessageQueueRunning && doDispatch)
80 {
81 // DispatchIncomingCommands() returns true of it found any command to dispatch (event, result or state change)
82 UnityEngine.Profiling.Profiler.BeginSample("DispatchIncomingCommands");
83 doDispatch = PhotonNetwork.networkingPeer.DispatchIncomingCommands();
84 UnityEngine.Profiling.Profiler.EndSample();
85 }
86
87 int currentMsSinceStart = (int)(Time.realtimeSinceStartup * 1000); // avoiding Environment.TickCount, which could be negative on long-running platforms
88 if (PhotonNetwork.isMessageQueueRunning && currentMsSinceStart > this.nextSendTickCountOnSerialize)
89 {
90 PhotonNetwork.networkingPeer.RunViewUpdate();
91 this.nextSendTickCountOnSerialize = currentMsSinceStart + this.updateIntervalOnSerialize;
92 this.nextSendTickCount = 0; // immediately send when synchronization code was running
93 }
94
95 currentMsSinceStart = (int)(Time.realtimeSinceStartup * 1000);
96 if (currentMsSinceStart > this.nextSendTickCount)
97 {
98 bool doSend = true;
99 while (PhotonNetwork.isMessageQueueRunning && doSend)
100 {
101 // Send all outgoing commands
102 UnityEngine.Profiling.Profiler.BeginSample("SendOutgoingCommands");
103 doSend = PhotonNetwork.networkingPeer.SendOutgoingCommands();
104 UnityEngine.Profiling.Profiler.EndSample();
105 }
106
107 this.nextSendTickCount = currentMsSinceStart + this.updateInterval;
108 }
109 }
File name: PhotonNetwork.cs
Copy
1167 /// - Invalid AppId (calls: OnFailedToConnectToPhoton(). check exact AppId value)
1168 /// - Network issues (calls: OnFailedToConnectToPhoton())
1169 /// - Invalid region (calls: OnConnectionFail() with DisconnectCause.InvalidRegion)
1170 /// - Subscription CCU limit reached (calls: OnConnectionFail() with DisconnectCause.MaxCcuReached. also calls: OnPhotonMaxCccuReached())
1179 public static bool ConnectToMaster(string masterServerAddress, int port, string appID, string gameVersion)
1180 {
1181 if (networkingPeer.PeerState != PeerStateValue.Disconnected)
1182 {
1183 Debug.LogWarning("ConnectToMaster() failed. Can only connect while in state 'Disconnected'. Current state: " + networkingPeer.PeerState);
1184 return false;
1185 }
1186
1187 if (offlineMode)
1188 {
1189 offlineMode = false; // Cleanup offline mode
1190 Debug.LogWarning("ConnectToMaster() disabled the offline mode. No longer offline.");
1191 }
1192
1193 if (!isMessageQueueRunning)
1194 {
1195 isMessageQueueRunning = true;
1196 Debug.LogWarning("ConnectToMaster() enabled isMessageQueueRunning. Needs to be able to dispatch incoming messages.");
1197 }
1198
1199 networkingPeer.SetApp(appID, gameVersion);
1200 networkingPeer.IsUsingNameServer = false;
1201 networkingPeer.IsInitialConnect = true;
1202 networkingPeer.MasterServerAddress = (port == 0) ? masterServerAddress : masterServerAddress + ":" + port;
1203
1204 return networkingPeer.Connect(networkingPeer.MasterServerAddress, ServerConnection.MasterServer);
1205 }
File name: PhotonStatsGui.cs
Copy
77 public void TrafficStatsWindow(int windowID)
78 {
79 bool statsToLog = false;
80 TrafficStatsGameLevel gls = PhotonNetwork.networkingPeer.TrafficStatsGameLevel;
81 long elapsedMs = PhotonNetwork.networkingPeer.TrafficStatsElapsedMs / 1000;
82 if (elapsedMs == 0)
83 {
84 elapsedMs = 1;
85 }
86
87 GUILayout.BeginHorizontal();
88 this.buttonsOn = GUILayout.Toggle(this.buttonsOn, "buttons");
89 this.healthStatsVisible = GUILayout.Toggle(this.healthStatsVisible, "health");
90 this.trafficStatsOn = GUILayout.Toggle(this.trafficStatsOn, "traffic");
91 GUILayout.EndHorizontal();
92
93 string total = string.Format("Out|In|Sum:\t{0,4} | {1,4} | {2,4}", gls.TotalOutgoingMessageCount, gls.TotalIncomingMessageCount, gls.TotalMessageCount);
94 string elapsedTime = string.Format("{0}sec average:", elapsedMs);
95 string average = string.Format("Out|In|Sum:\t{0,4} | {1,4} | {2,4}", gls.TotalOutgoingMessageCount / elapsedMs, gls.TotalIncomingMessageCount / elapsedMs, gls.TotalMessageCount / elapsedMs);
96 GUILayout.Label(total);
97 GUILayout.Label(elapsedTime);
98 GUILayout.Label(average);
99
100 if (this.buttonsOn)
101 {
102 GUILayout.BeginHorizontal();
103 this.statsOn = GUILayout.Toggle(this.statsOn, "stats on");
104 if (GUILayout.Button("Reset"))
105 {
106 PhotonNetwork.networkingPeer.TrafficStatsReset();
107 PhotonNetwork.networkingPeer.TrafficStatsEnabled = true;
108 }
109 statsToLog = GUILayout.Button("To Log");
110 GUILayout.EndHorizontal();
111 }
112
113 string trafficStatsIn = string.Empty;
114 string trafficStatsOut = string.Empty;
115 if (this.trafficStatsOn)
116 {
117 trafficStatsIn = "Incoming: " + PhotonNetwork.networkingPeer.TrafficStatsIncoming.ToString();
118 trafficStatsOut = "Outgoing: " + PhotonNetwork.networkingPeer.TrafficStatsOutgoing.ToString();
119 GUILayout.Label(trafficStatsIn);
120 GUILayout.Label(trafficStatsOut);
121 }
122
123 string healthStats = string.Empty;
124 if (this.healthStatsVisible)
125 {
126 healthStats = string.Format(
127 "ping: {6}[+/-{7}]ms\nlongest delta between\nsend: {0,4}ms disp: {1,4}ms\nlongest time for:\nev({3}):{2,3}ms op({5}):{4,3}ms",
128 gls.LongestDeltaBetweenSending,
129 gls.LongestDeltaBetweenDispatching,
130 gls.LongestEventCallback,
131 gls.LongestEventCallbackCode,
132 gls.LongestOpResponseCallback,
133 gls.LongestOpResponseCallbackOpCode,
134 PhotonNetwork.networkingPeer.RoundTripTime,
135 PhotonNetwork.networkingPeer.RoundTripTimeVariance);
136 GUILayout.Label(healthStats);
137 }
138
139 if (statsToLog)
140 {
141 string complete = string.Format("{0}\n{1}\n{2}\n{3}\n{4}\n{5}", total, elapsedTime, average, trafficStatsIn, trafficStatsOut, healthStats);
142 Debug.Log(complete);
143 }
144
145 // if anything was clicked, the height of this window is likely changed. reduce it to be layouted again next frame
146 if (GUI.changed)
147 {
148 this.statsRect.height = 100;
149 }
150
151 GUI.DragWindow();
152 }
File name: NetworkAdapter.cs
Copy
72 public void Connect()
73 {
74 if (!PhotonNetwork.connected)
75 {
76 OnConnectedToMasterSignal.Dispatch();
77
78 PhotonNetwork.playerName = PlayerName;
79 PhotonNetwork.ConnectUsingSettings("v1.0");
80 }
81 else
82 {
83 OnConnectedToMaster();
84 }
85 }
File name: NetworkAdapter.cs
Copy
157 private void OnConnectedToMaster()
158 {
159 OnConnectedToMasterSignal.Dispatch();
160 }
File name: NetworkAdapter.cs
Copy
162 private void OnDisconnectedFromPhoton()
163 {
164 OnDisconnectedFromMasterSignal.Dispatch();
165 }
File name: NetworkAdapter.cs
Copy
167 private void OnFailToConnectToPhoton()
168 {
169 OnConnectionFailSignal.Dispatch("Connection failed doe to invalid AppId or some network issues");
170 }
File name: NetworkAdapter.cs
Copy
172 private void OnConnectionFail(DisconnectCause cause)
173 {
174 OnConnectionFailSignal.Dispatch("Connection failed doe to " + cause);
175 }
File name: NetworkAdapter.cs
Copy
177 private void OnJoinedRoom()
178 {
179 OnJoinedRoomSignal.Dispatch();
180 CheckForAllPlayers();
181 }
File name: NetworkAdapter.cs
Copy
188 private void CheckForAllPlayers()
189 {
190 if (PhotonNetwork.room.playerCount == 2)
191 {
192 OnAllPlayersConnectedSignal.Dispatch();
193 }
194 }
Dispatch 154 lượt xem
Gõ tìm kiếm nhanh...