Пример #1
0
		/// <summary>
		/// Internal helper function to update local copy of the friends list.
		/// </summary>
		/// <param name="messages">Messages received from the Steam service.</param>
		private async void ProcessMessagesReceived( SteamChatPollResult result ) {

			result.Messages.Sort();

			List<SteamChatMessage> messages = new List<SteamChatMessage>();
			List<SteamChatRelationshipNotification> notifications = new List<SteamChatRelationshipNotification>();

			foreach( var message in result.Messages ) {

				if( message.Type == ChatMessageType.MessageText || message.Type == ChatMessageType.Typing || message.Type == ChatMessageType.LeftConversation ) {
					messages.Add( SteamChatMessage.CreateFromPollMessage( message ) );
				} else if( message.Type == ChatMessageType.PersonaStateChange || message.Type == ChatMessageType.PersonaRelationship ) {

					// Filter out notifications about the currently authenticated user
					if( message.FromUser.Equals( ChatSession.SteamID ) )
						continue;

					notifications.Add( SteamChatRelationshipNotification.CreateFromPollMessage( message ) );

					if( FriendsList.Friends.ContainsKey( message.FromUser ) ) {
						FriendsList.Friends[message.FromUser].PlayerInfo.PersonaState = message.PersonaState;
						FriendsList.Friends[message.FromUser].PlayerInfo.PersonaName = message.PersonaName;
						if( message.PersonaState == PersonaState.Offline )
							FriendsList.Friends[message.FromUser].PlayerInfo.LastLogOff = message.UTCMessageDateTime;
					} else {
						var newUser = new SteamUser {
							SteamID = message.FromUser,
							PlayerInfo = new SteamCommunity.PlayerInfo {
								PersonaName = message.PersonaName,
								PersonaState = message.PersonaState
							}
						};
						try {
							await newUser.GetProfileDataAsync( this );
						} catch( Exception ) {
							// Likely Network Connectivity Failure
						}
						FriendsList.Friends.Add( message.FromUser, newUser );
					}

				}

			}

			if( messages.Count > 0 ) {
				OnSteamChatMessagesReceived( new SteamChatMessagesReceivedEventArgs {
					UTCServerChangeDateTime = result.UTCTimestamp,
					NewMessages = messages
				} );
			}

			if( notifications.Count > 0 ) {
				OnSteamChatUserStateChange( new SteamChatUserStateChangeEventArgs {
					UTCServerChangeDateTime = result.UTCTimestamp,
					StateChanges = notifications
				} );
			}

		}