forked from lug/matterbridge
		
	
		
			
				
	
	
		
			63 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package steam
 | 
						|
 | 
						|
import (
 | 
						|
	. "github.com/Philipp15b/go-steam/protocol"
 | 
						|
	. "github.com/Philipp15b/go-steam/protocol/protobuf"
 | 
						|
	. "github.com/Philipp15b/go-steam/protocol/steamlang"
 | 
						|
)
 | 
						|
 | 
						|
type Notifications struct {
 | 
						|
	// Maps notification types to their count. If a type is not present in the map,
 | 
						|
	// its count is zero.
 | 
						|
	notifications map[NotificationType]uint
 | 
						|
	client        *Client
 | 
						|
}
 | 
						|
 | 
						|
func newNotifications(client *Client) *Notifications {
 | 
						|
	return &Notifications{
 | 
						|
		make(map[NotificationType]uint),
 | 
						|
		client,
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func (n *Notifications) HandlePacket(packet *Packet) {
 | 
						|
	switch packet.EMsg {
 | 
						|
	case EMsg_ClientUserNotifications:
 | 
						|
		n.handleClientUserNotifications(packet)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
type NotificationType uint
 | 
						|
 | 
						|
const (
 | 
						|
	TradeOffer NotificationType = 1
 | 
						|
)
 | 
						|
 | 
						|
func (n *Notifications) handleClientUserNotifications(packet *Packet) {
 | 
						|
	msg := new(CMsgClientUserNotifications)
 | 
						|
	packet.ReadProtoMsg(msg)
 | 
						|
 | 
						|
	for _, notification := range msg.GetNotifications() {
 | 
						|
		typ := NotificationType(*notification.UserNotificationType)
 | 
						|
		count := uint(*notification.Count)
 | 
						|
		n.notifications[typ] = count
 | 
						|
		n.client.Emit(&NotificationEvent{typ, count})
 | 
						|
	}
 | 
						|
 | 
						|
	// check if there is a notification in our map that isn't in the current packet
 | 
						|
	for typ, _ := range n.notifications {
 | 
						|
		exists := false
 | 
						|
		for _, t := range msg.GetNotifications() {
 | 
						|
			if NotificationType(*t.UserNotificationType) == typ {
 | 
						|
				exists = true
 | 
						|
				break
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		if !exists {
 | 
						|
			delete(n.notifications, typ)
 | 
						|
			n.client.Emit(&NotificationEvent{typ, 0})
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |