Exemple #1
0
 public void OnMessageReceived(byte[] dataBytes)
 {
     lock (receviedMessageList)
     {
         if (messageDecoder.Decode(dataBytes, out int messageId, out byte[] body))
         {
             ClientReceviedMessage receviedMessage = receviedMessagePool.Get();
             receviedMessage.Id   = messageId;
             receviedMessage.Body = body;
             receviedMessageList.Add(receviedMessage);
         }
Exemple #2
0
        public void DoUpdate(float deltaTime, float unscaleDeltaTime)
        {
            if (client == null)
            {
                return;
            }

            lock (stateLocker)
            {
                if (State != targetState)
                {
                    State = targetState;
                    if (targetState == ClientState.Connected)
                    {
                        NetConnected?.Invoke();
                    }
                    else if (targetState == ClientState.Disconnected)
                    {
                        NetDisconnected?.Invoke();
                    }
                    else if (targetState == ClientState.Error)
                    {
                        NetError?.Invoke();
                        if (AutoDisconnectedWhenError)
                        {
                            Disconnect();
                        }
                    }
                }
            }

            lock (receviedMessageList)
            {
                if (receviedMessageList.Count > 0)
                {
                    if (IsConnected)
                    {
                        int maxCount = Math.Min(receviedMessageList.Count, DecodeMessageMaxCount);
                        for (int i = 0; i < maxCount; ++i)
                        {
                            ClientReceviedMessage message = receviedMessageList[0];
                            receviedMessageList.RemoveAt(0);

                            if (messageListenerDic.TryGetValue(message.Id, out var list))
                            {
                                foreach (var listener in list)
                                {
                                    listener(message.Id, message.Body);
                                }
                            }

                            receviedMessagePool.Release(message);
                        }
                    }
                    else
                    {
                        foreach (var message in receviedMessageList)
                        {
                            receviedMessagePool.Release(message);
                        }
                        receviedMessageList.Clear();
                    }
                }
            }
        }