// This example demonstrates calling the Cloud Pub/Sub API. As of 20 // Aug 2014, the Cloud Pub/Sub API is only available if you're // whitelisted. If you're interested in using it, please apply for the // Limited Preview program at the following form: // http://goo.gl/Wql9HL // // Also, before running this example, be sure to enable Cloud Pub/Sub // service on your project in Developer Console at: // https://console.developers.google.com/ // // It has 8 subcommands as follows: // // <project_id> list_topics // <project_id> create_topic <topic> // <project_id> delete_topic <topic> // <project_id> list_subscriptions // <project_id> create_subscription <subscription> <linked topic> // <project_id> delete_subscription <subscription> // <project_id> connect_irc <topic> <server> <channel> // <project_id> pull_messages <subscription> // // You can use either of your alphanumerical or numerial Cloud Project // ID for project_id. You can choose any names for topic and // subscription as long as they follow the naming rule described at: // https://developers.google.com/pubsub/overview#names // // You can list/create/delete topics/subscriptions by self-explanatory // subcommands, as well as connect to an IRC channel and publish // messages from the IRC channel to a specified Cloud Pub/Sub topic by // the "connect_irc" subcommand, or continuously pull messages from a // specified Cloud Pub/Sub subscription and display the data by the // "pull_messages" subcommand. func pubsubMain(client *http.Client, argv []string) { checkArgs(argv, 2) service, err := pubsub.New(client) if err != nil { log.Fatalf("Unable to create PubSub service: %v", err) } m := map[string]func(service *pubsub.Service, argv []string){ "list_topics": listTopics, "create_topic": createTopic, "delete_topic": deleteTopic, "list_subscriptions": listSubscriptions, "create_subscription": createSubscription, "delete_subscription": deleteSubscription, "connect_irc": connectIRC, "pull_messages": pullMessages, } f, ok := m[argv[1]] if !ok { pubsubUsage() os.Exit(2) } f(service, argv) }
// NewClient create a new PubSub client. func NewClient(ctx context.Context, projectID string, opts ...cloud.ClientOption) (*Client, error) { o := []cloud.ClientOption{ cloud.WithEndpoint(prodAddr), cloud.WithScopes(raw.PubsubScope, raw.CloudPlatformScope), cloud.WithUserAgent(userAgent), } o = append(o, opts...) httpClient, endpoint, err := transport.NewHTTPClient(ctx, o...) if err != nil { return nil, fmt.Errorf("dialing: %v", err) } s, err := raw.New(httpClient) if err != nil { return nil, err } s.BasePath = endpoint c := &Client{ projectID: projectID, s: s, } return c, nil }
func rawService(ctx context.Context) *raw.Service { return internal.Service(ctx, "pubsub", func(hc *http.Client) interface{} { svc, _ := raw.New(hc) return svc }).(*raw.Service) }