public static void StartWaiting(ServerType type, ClientTcpMessage msg, int resendTimes) { NetworkWaitingItem item = new NetworkWaitingItem(); item.message = msg; item.timer = 0; item.resendTimes = resendTimes; item.state = NetworkItemState.BeginToWait; waitingMessages[type].Add(msg.sequence, item); DebugUtils.Log(DebugUtils.Type.NetAlert, String.Format("sending protocol {0} with seq {1}", msg.protocalCode, msg.sequence)); //Debug.Log( string.Format( "StartWaiting: {0} resendTimes:{1} waitingBackMsgQueue.Count:{2}", msg.protocalCode, resendTimes, waitingBackMsgQueue.Count ) ); }
public static void OnReceiving(ServerType type, ServerTcpMessage serverMessage) { DebugUtils.Log(DebugUtils.Type.NetAlert, "server message " + serverMessage.protocalCode + " with seq " + serverMessage.sequence + " has arrived!"); Dictionary <long, NetworkWaitingItem> messages = waitingMessages[type]; if (serverMessage.sequence != -1 && messages.Count > 0) { NetworkWaitingItem item = null; if (messages.TryGetValue(serverMessage.sequence, out item)) { DebugUtils.Log(DebugUtils.Type.NetAlert, string.Format("the client message {0} with seq {1} has received its response {2}!", item.message.protocalCode, serverMessage.sequence, serverMessage.protocalCode)); messages.Remove(item.message.sequence); maskCounters[type]--; } if (maskCounters[type] == 0 && displayWaitingMasks[type]) { DisplayWaitingMask(type, false); } } }
public static void Update() { Dictionary <ServerType, Dictionary <long, NetworkWaitingItem> > .Enumerator enumerator = waitingMessages.GetEnumerator(); float time = Time.deltaTime; while (enumerator.MoveNext()) { if (enumerator.Current.Value.Count == 0) { continue; } ServerType type = enumerator.Current.Key; Dictionary <long, NetworkWaitingItem> messages = enumerator.Current.Value; bool displayErrorMask = false; foreach (KeyValuePair <long, NetworkWaitingItem> it in messages) { NetworkWaitingItem item = it.Value; item.timer += time; if (item.state == NetworkItemState.BeginToWait && item.timer >= MESSAGE_WAIT_TIME) { maskCounters[type]++; item.state = NetworkItemState.Waiting; DebugUtils.LogWarning(DebugUtils.Type.NetAlert, String.Format("wait for the protocol {0} with seq {1}", item.message.protocalCode, item.message.sequence)); } else if (item.state == NetworkItemState.Waiting && item.timer >= MESSAGE_ERROR_TIME) { displayErrorMask = true; item.state = NetworkItemState.OOT; } } if (displayErrorMask && !displayErrorMasks[type] /*|| !DeviceUtil.CheckNetworkState()*/) { DisplayErrorMask(type, true); displayErrorMasks[type] = true; //don't just resend the message, it needs the sequence number to avoid the same op on server again. if reconnect to the server, need to sync the data. /* * if ( waitingMessages[i].resendTimes >= 1 || waitingMessages[i].timer >= showNetErrorMaskTime ) * { * ShowNetErrorMask( string.Format( "resendOverTime: {0}", waitingMessages[i].message.protocalCode ) ); * } * else * { * ResendMessage( waitingMessages[i] ); * } */ } else if (maskCounters[type] > 0 && !displayWaitingMasks[type]) { DisplayWaitingMask(type, true); } } }