async void HandleRings(RingCommand ringCommand, IConnection connection) { await @lock.ReaderLockAsync(); try { if (this.closed) return; User user = GetUserInner(ringCommand.Caller); user.UpdateNicknameFromIM(ringCommand.CallerNickname); SocketEndPoint endPoint = SocketEndPoint.Parse(ringCommand.Endpoint); IMSessionInvitation invite = new IMSessionInvitation(user, endPoint, ringCommand.SessionId, ringCommand.AuthString); OnInvitedToIMSession(new InvitationEventArgs(invite)); } finally { @lock.ReaderRelease(); } }
internal InvitationEventArgs(IMSessionInvitation invitation) { Invitation = invitation; }
public async Task<IMSession> AcceptInvitationAsync(IMSessionInvitation invitation) { await @lock.ReaderLockAsync(); try { if (closed) throw new ObjectDisposedException(GetType().Name); if (!IsLoggedIn) throw new NotLoggedInException(); if (Interlocked.Exchange(ref invitation.accepted, 1) == 1) throw new InvalidOperationException("Invitation already accepted."); IMSession imSession = new IMSession(this); await imSession.ConnectByInvitation(invitation); IMSessions.AddIMSessionInner(imSession); OnIMSessionCreated(new IMSessionEventArgs(imSession, invitation)); return imSession; } finally { @lock.ReaderRelease(); } }
internal IMSessionEventArgs(IMSession imSession, IMSessionInvitation invitation) { IMSession = imSession; Invitation = invitation; }