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