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); }
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(); } } } }