Version: v0.0.0-...-44beadc Latest Latest

This package is not in the latest version of its module.

Go to latest
Published: Dec 6, 2021 License: MIT Imports: 12 Imported by: 22


Chat App

Example app using subscriptions to build a chat room.

go run ./server/server.go

The react app uses two different implementation for the websocket link

First you need to install the dependencies

npm install

Then to run the app with the apollo-link-ws implementation do

npm run start

or to run the app with the graphql-ws implementation (and the newer graphql-transport-ws protocol) do

npm run start:graphql-transport-ws




This section is empty.


This section is empty.


func NewExecutableSchema

func NewExecutableSchema(cfg Config) graphql.ExecutableSchema

NewExecutableSchema creates an ExecutableSchema from the ResolverRoot interface.


type Chatroom

type Chatroom struct {
	Name      string
	Messages  []Message
	Observers map[string]struct {
		Username string
		Message  chan *Message

type ComplexityRoot

type ComplexityRoot struct {
	Chatroom struct {
		Messages func(childComplexity int) int
		Name     func(childComplexity int) int

	Message struct {
		CreatedAt func(childComplexity int) int
		CreatedBy func(childComplexity int) int
		ID        func(childComplexity int) int
		Text      func(childComplexity int) int

	Mutation struct {
		Post func(childComplexity int, text string, username string, roomName string) int

	Query struct {
		Room func(childComplexity int, name string) int

	Subscription struct {
		MessageAdded func(childComplexity int, roomName string) int

type Config

type Config struct {
	Resolvers  ResolverRoot
	Directives DirectiveRoot
	Complexity ComplexityRoot

func New

func New() Config

type DirectiveRoot

type DirectiveRoot struct {
	User func(ctx context.Context, obj interface{}, next graphql.Resolver, username string) (res interface{}, err error)

type Message

type Message struct {
	ID        string    `json:"id"`
	Text      string    `json:"text"`
	CreatedBy string    `json:"createdBy"`
	CreatedAt time.Time `json:"createdAt"`

type MutationResolver

type MutationResolver interface {
	Post(ctx context.Context, text string, username string, roomName string) (*Message, error)

type QueryResolver

type QueryResolver interface {
	Room(ctx context.Context, name string) (*Chatroom, error)

type ResolverRoot

type ResolverRoot interface {
	Mutation() MutationResolver
	Query() QueryResolver
	Subscription() SubscriptionResolver

type SubscriptionResolver

type SubscriptionResolver interface {
	MessageAdded(ctx context.Context, roomName string) (<-chan *Message, error)


Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL