@@ -193,6 +193,9 @@ public async Task<IStreamMessage> SendNewMessageAsync(StreamSendMessageRequest s
193193
194194 var response = await LowLevelClient . InternalMessageApi . SendNewMessageAsync ( Type , Id ,
195195 sendMessageRequest . TrySaveToDto ( ) ) ;
196+
197+ //StreamTodo: we update internal cache message without server confirmation that message got accepted. e.g. message could be rejected
198+ //It's ok to update the cache "in good faith" to not introduce update delay but we should handle if message got rejected
196199 var streamMessage = InternalAppendOrUpdateMessage ( response . Message ) ;
197200 return streamMessage ;
198201 }
@@ -757,7 +760,7 @@ internal void HandleChannelTruncatedEvent(NotificationChannelTruncatedEventInter
757760
758761 internal void InternalAddMember ( StreamChannelMember member )
759762 {
760- if ( _members . Contains ( member ) )
763+ if ( _members . ContainsNoAlloc ( member ) )
761764 {
762765 return ;
763766 }
@@ -769,7 +772,7 @@ internal void InternalAddMember(StreamChannelMember member)
769772
770773 internal void InternalRemoveMember ( StreamChannelMember member )
771774 {
772- if ( ! _members . Contains ( member ) )
775+ if ( ! _members . ContainsNoAlloc ( member ) )
773776 {
774777 return ;
775778 }
@@ -781,7 +784,7 @@ internal void InternalRemoveMember(StreamChannelMember member)
781784
782785 internal void InternalUpdateMember ( StreamChannelMember member )
783786 {
784- if ( ! _members . Contains ( member ) )
787+ if ( ! _members . ContainsNoAlloc ( member ) )
785788 {
786789 _members . Add ( member ) ;
787790 }
@@ -822,7 +825,7 @@ private StreamMessage InternalAppendOrUpdateMessage(MessageInternalDTO dto)
822825 var streamMessage = Cache . TryCreateOrUpdate ( dto , out var wasCreated ) ;
823826 if ( wasCreated )
824827 {
825- if ( ! _messages . Contains ( streamMessage ) )
828+ if ( ! _messages . ContainsNoAlloc ( streamMessage ) )
826829 {
827830 _messages . Add ( streamMessage ) ;
828831 MessageReceived ? . Invoke ( this , streamMessage ) ;
@@ -959,7 +962,7 @@ internal void InternalHandleUserWatchingStartEvent(UserWatchingStartEventInterna
959962 AssertCid ( eventDto . Cid ) ;
960963
961964 var user = Cache . TryCreateOrUpdate ( eventDto . User , out var wasCreated ) ;
962- if ( wasCreated || ! _watchers . Contains ( user ) )
965+ if ( wasCreated || ! _watchers . ContainsNoAlloc ( user ) )
963966 {
964967 WatcherCount += 1 ;
965968 _watchers . Add ( user ) ;
@@ -1010,7 +1013,7 @@ internal void InternalHandleTypingStarted(TypingStartEventInternalDTO eventDto)
10101013 var user = Cache . TryCreateOrUpdate ( eventDto . User ) ;
10111014 StreamAsserts . AssertNotNull ( user , nameof ( user ) ) ;
10121015
1013- if ( ! _typingUsers . Contains ( user ) )
1016+ if ( ! _typingUsers . ContainsNoAlloc ( user ) )
10141017 {
10151018 _typingUsers . Add ( user ) ;
10161019 UserStartedTyping ? . Invoke ( this , user ) ;
0 commit comments