github.com/vmware/transport-go@v1.3.4/bridge/bridge_client_subscription.go (about)

     1  // Copyright 2019-2020 VMware, Inc.
     2  // SPDX-License-Identifier: BSD-2-Clause
     3  
     4  package bridge
     5  
     6  import (
     7  	"github.com/go-stomp/stomp/v3/frame"
     8  	"github.com/google/uuid"
     9  	"github.com/vmware/transport-go/model"
    10  	"sync"
    11  )
    12  
    13  // BridgeClientSub is a client subscription that encapsulates message and error channels for a subscription
    14  type BridgeClientSub struct {
    15  	C           chan *model.Message // MESSAGE payloads
    16  	E           chan *model.Message // ERROR payloads.
    17  	Id          *uuid.UUID
    18  	Destination string
    19  	Client      *BridgeClient
    20  	subscribed  bool
    21  	lock        sync.RWMutex
    22  }
    23  
    24  // Send an UNSUBSCRIBE frame for subscription destination.
    25  func (cs *BridgeClientSub) Unsubscribe() {
    26  	cs.lock.Lock()
    27  	cs.subscribed = false
    28  	cs.lock.Unlock()
    29  	unsubscribeFrame := frame.New(frame.UNSUBSCRIBE,
    30  		frame.Id, cs.Id.String(),
    31  		frame.Destination, cs.Destination)
    32  
    33  	cs.Client.SendFrame(unsubscribeFrame)
    34  }