Example #1
0
        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 ) );
        }
Example #2
0
        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);
                }
            }
        }
Example #3
0
        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);
                }
            }
        }