►
From YouTube: Scalable Multiplayer Game Design with OpenShift (E2)
Description
This monthly series explores what it takes to design a scale-out multiplayer video game architecture using containers and OpenShift. There will be live coding, philosophical design discussion, and everything in between.
In this episode, we'll look at using Red Hat Single Sign On (RHSSO) with a Ruby application to build a game lobby, and possibly add AMQ-based chat services. We'll also continue discussions about the design for the game, Space Ring Things.
B
B
Hi
everybody
welcome
back
to
another
monthly
episode
of
scalable
multiplayer
game
design
with
openshift.
I'm
your
host
eric
jacobs
joining
us
today.
We've
got
jared
and
I'm
gonna
butcher.
Your
last
name,
because
I
can't
remember
from
last
month
how
you
pronounce
it.
A
D
C
B
Kylie
all
right
so
yeah.
What
are
we?
What
are
we
gonna
do
today?
So
I
was
a
busy
little
beaver
in
the
off
time
and
I
built
a
really
janky
ruby
application
that.
E
B
B
We're
still
starting
soon
anyway,
I'm
just
gonna
pretend
like
nothing's
happening,
so
we
it
says
we're
live.
I
was
a
busy
little
beaver
and
I
wrote
a
really
crappy
ruby
application
that
uses
red
hat
single
sign-on
to
act
kind
of
as
a
as
a
game
lobby.
If
you
will-
and
it
talks
to
oh
man,
it
talks
to
itself
it
uses
sinatra
and
it
has
like
a
really
rudimentary
chat
and
it
uses.
B
B
So
one
of
the
things
that
you
know
most
multiplayer
games
have
is
like
they've
got
this
lobby
experience
where,
before
you
get
into
the
game,
you
know
you
see
stuff.
So
in
the
case
of
like
call
of
duty-
and
you
see
your
little
bad
dude
or
bad
dudette
walking
around
and
you
got
your
gear
on
or
you
know
whatever
you
can
choose
your
different
game
modes
and
do
some
other
things,
and
so
the
space
ring
things
game
lobby.
Is
this
ruby
app?
B
C
B
Derek
may
join
us,
I
think
he's
floating
around
somewhere
but
anyway.
So
one
of
the
cool
things
about
openshift
is
this
concept
of
operators
and,
if
you've
been
watching
many
of
our
live
streams
in
the
past.
You've
probably
seen
these
before,
but
the
easiest
way
to
think
about
an
operator
is
it's
just
a
pod
that
runs
some
software
and
that
software
is
basically
a
control,
loop
and
so
you've
got
this
yaml
object
and
the
software
looks
at
the
yaml
object,
and
it
says
oh
you're
asking
me
to
do
something:
I'm
going
to
go.
B
B
F
E
B
User
user
error
already
that
didn't
take
very
long,
so
we're
gonna
create
a
project.
We're
gonna
call
it
srt,
which
stands
for
space
ring
things
go
back
to
operator.
B
And
we're
going
to
install
it
in
srt,
okay,
install
and
so
what's
happening
right
now
is
there's
this
feature
of
openshift
called
operator
lifecycle
manager.
That
is
doing
the
prerequisites
for
installing
this
operator.
One
of
the
things
that
operators
rely
on
is
a
kubernetes
concept,
called
crd
custom
resource
definition
and,
as
you
can
see
here,
provided
apis
a
custom
resource
definition
is
a
way
to
extend
the
kubernetes
api.
B
You
actually
make
new
api
objects
and,
in
the
case
of
single
sign-on
there's
an
api
object
now
called
a
key
cloak,
a
key
cloak
realm,
a
key
cloak,
backup
and
so
on
and
so
forth.
At
this
point,
the
single
sign-on
operator
is
installed
in
the
srt
project
and
it's
available
to
be
used.
It's
looking
for
instances
of
these
api
objects,
I'm
going
to
paste
the
url
for
the
ruby
lobby.
E
B
Last
commit
is:
remove
gem
lock
file,
remove
gem
lock
file,
perfect
okay,
so
we
are
up
to
date
all
right.
The
instructions
say.
B
What
kind
of
funny
code
is
this?
It
doesn't
look
like
the
best
language.
The
best
language
is
c-sharp.
E
B
Are
already
complaining
about
me,
I,
I
am
a
complete
clown
hack
of
a
developer,
and
the
only
thing
that
I
can
do
is
ruby
and
I
can
copy
and
paste
my
way
from
stack
overflow
with
python.
So
we
I
went
with
ruby
for
this
use
the
operator
hub
to
install
the
operator,
create
an
auth
project
and
then
create
a
key
cloak
instance
which
deploys
sso
in
its
database.
So
I
can't
even
follow
my
own
directions.
B
Project
again
or
I
will
create
the
auth
project
that
it
asks
for,
and
then
it
says,
create
a
key
cloak
instance
which
deploys
red
hat
sso
and
its
database.
If
we
look
here,
this
is
a
very
simple
yaml
definition
of
a
key
cloak
with
one
instance.
So
there's
no
real
h,
a
or
anything
is
it
accessible
externally?
Yes,
it
is
okay,
great.
E
View,
yes,
all
right,
so
we
hit
create.
E
B
I
may
have,
I
may
have
already
completely
hosed
this,
but
that's
what
we
do.
You
know
what
I
did
already
completely
hose
this.
So,
let's.
B
F
B
Operator
deployed
and
if
we
look
at
key
cloak
instances,
we
see
that
we
have
this
srt
instance
defined,
and
so
the
operator
is
going
to
see
that
this
thing
exists.
I
hope
and
then
what
it's
going
to
do
is
start
actually
deploying
single
sign-on.
There
we
go
boom.
Look
at
that.
B
Magic,
so
it
has
deployed
a
postgres
database
and
a
key
cloak
server,
and
so
we're
just
waiting
for
these
two
things
to
come
up,
and
so,
while
we're
waiting
for
that,
we'll
take
a
quick
look
at
the
code
here.
C
E
B
Okay,
so
this
is
using
ruby
and
sinatra:
sinatra
is
a
really
simple
restful
framework.
You
tell
it
what
http
requests
to
respond
to
and
how,
if
you've,
seen
python
flask,
you
know,
there's
every
language
has
something
like
this
right,
and
so
what
we're
doing
is
we're
pulling
various
environment
variables
that
will
tell
this
application
where
to
find
the
single
sign-on
server
and
then
there's
a
basic
home
page.
That
says,
if
there
is
a
session
with
user
info
grab
the
user
info
and
then
render
the
index
page.
B
So
you
get
a
token
from
single
sign-on
which
brings
us
back
to
our
app,
which
is
login.
After
we
pull
the
code
out
of
the
query
parameters,
then
we
process
it
to
get
the
user's
access
token
and
set
up
the
session,
and
then
we
send
you
to
the
lobby
and
then
the
lobby
is
doing
this
horrifically
awesome,
http
event,
stream
thing.
It's
really
terrible,
but
basically
you'll
send
a
chat
message
to
the
server
and
then
everybody
is
subscribed
to
this
kind
of
event
stream
channel,
and
then
they
see
the
chat
messages.
B
This
is
super
hackish.
Here's
all
this,
like
oauth
client
logic
that
I
had
to
put
in
for
processing
the
session
and
figuring
out
is
the
session
still
valid.
Do
we
have
to
send
them
back?
But
basically
this
is
just
all
standard,
oidc,
oauth
stuff
and
we're
using
this
open
id
connect,
rubygem,
which
is
community
stuff
available
from
lots
of
folks
and
then
jwt
to
deal
with
web
tokens
right.
B
B
Kubernetes
secrets
are
a
way
of
storing
credentials
and
secrets
and
other
information,
the
operator
when
it
creates
this
red
hat
sso
instance.
It's
actually
setting
up
a
password
for
us.
We
could
have
defined
it,
but
I
just
let
it
do
it
for
me,
I
can
the
user
sorry,
the
username
is
just
admin.
The
password
is
whatever
it
is.
So
I
can
just
copy
that
and
if
I
go.
B
And
hooray,
we
have
logged
in
to
key
cloak
and
so
to
recap,
for
people
who
are
just
joining,
you
know:
we've
we've
deployed
red
hat's
single
sign-on
solution,
which
is
a
enterprise
capable
identity
management
platform
right
users,
groups
rbac
all
that
fun
stuff.
B
We're
going
to
use
that
to
provide
authentication
services
for
everything
in
our
multiplayer
game
right.
But
all
we
really
did
was
click
a
few
buttons
in
openshift
right.
We
we
installed,
we
created
a
project,
we
installed
an
operator,
we
wrote
a
few
lines
of
yaml
and
then
now
we
have
a
fully
functional
database,
backed
application
service
thing
going
on
right.
So
that's
that's
pretty
cool.
What
openshift
was
able
to
do
for
us.
B
The
next
step
is
to
create
a
realm
and
then
add
github
authentication
to
the
realm.
Creating
the
realm
is
pretty
easy.
We
just
click.
This
add
realm
button.
I
have
a
pre-staged
file
from
a
previous
episode
of
exercising
this
locally
and
trying
to
do
all
this
stuff.
B
B
It's
ugly
json,
so,
let's
see
hey
derek
welcome
thanks
for
joining
kind
of
the
appear
out
of.
B
I
have
to
double
check
like
what
it's
in
my
browser,
history,
multiplayer,
game,
design.
Okay,
that's
where
I
put
it
file
open
file,
multiplayer
game
design,.
B
B
B
B
I
try
to
log
in
with
github,
then
it
tries
to
send
me
back,
but
the
url
that
it's
going
to
send
me
back
to
is
actually
configured
in
github
as
a
provider,
so
I
need
to
go
to
github
and
fix
that
because
my
oh,
my
my
auth
application
is
configured
for
the
last
time.
I
did
this
so
in
this
case
I've
got
this
callback
url.
B
And
then
the
other
thing
I
have
to
do
is
I
have
to
import
the
secret
because,
for
whatever
reason
it
imports
his
asterisks,
even
though
it's
defined
in
the
json
file.
I
guess
this
is
for
safety
and
security
like
there's
no
way
like
we
don't
care.
What
your
plain
text
is
we're
not
going
to.
Let
you
do
it
so
anyway,
save
all
right.
The
github
provider
has
been
updated.
That's
great.
B
I
know
this
will
deploy
on
openshift
this
little
ruby
app,
but
for
now
I'm
not
gonna.
Do
that,
just
for
the
sake
of
time
like
it'll
work,
I
just
you
know
it's
gonna.
Take
me
an
extra
30
seconds
so
I'll
just
do
it
locally.
Initially
we're
pulling
all
these
environment
variables,
so
I
need
to
set
them
correctly.
I've
got
this
little
environment,
dev
file
and
I've
got
to
change
my
guide
to
whatever
it
was
2b
2fb7.
B
Perfectly
awesome
and
super
hackish:
yes,
those
are
the
keywords
of
the
day.
We,
we
probably
you
know,
would
be
really
fun
to
write
an
app
that
did
text
to
speech
or
speech
to
text
piped
it
through
nlp
did
word
detection
and
then
hit
like
the
twitch
api
or
the
restream
api
to
like
fire
off
some
pee-wee
herman-esque
word
of
the
day
kind
of
thing.
G
B
Anybody
wants,
if
anybody
wants
to
do
that,
man,
you
just
get
right
after
it.
I
think
that
would
be
super
awesome.
All
right,
ruby
lobby
open
a
tmux
session
we're
going
to
source.
B
All
right,
so
there
is
this
cool
little
thing
called
ngrok
that
I
found
that
basically
will
make
a
tunnel
to
the
public
internet
through
their
service
and
give
you
like
a
actually
accessible
hostname.
So
this
actually
will
work
right
now,
srt
lobby
ngrok.
So
I
will
paste
this
in
the
chat
for
giggles,
but
anybody
should
be
able
to
access
it
and
it
totally
opened
in
the
wrong
browser
window.
So
there's
that.
B
It's
a
work
in
progress,
hey
man,
like
I
said,
horrifically
awesome
super
hackish,
so
I
click
the
login
button
and
I
have
username
or
email
which
there
are
no
regular
users.
Configured
and
registration
is
disabled.
There's
no
link
for
that,
but
I
can
log
in
with
github,
and
so
I
click
github,
it's
going
to
redirect
me
to
github,
which
you
didn't
even
see
anything
because
I'm
already
logged
into
github.
So
as
soon
as
I
hit
github
github's
like
no
you're
cool
I'll,
send
you
back
and
that
sent
me
back
to
the
application.
B
If
we
look
at
the
log
for
the
application,
oh
we
see
jared
sprague's
already
got
logged
in
and
he's
got
his
refresh
token.
C
B
A
I'd
be
curious
to
know
what
this
other
active
stream
thing
in
the
browser
is.
Oh,
I
could.
B
E
G
B
D
B
Yeah
yeah
yeah
there
is,
there
is
no
error,
checking
or
or
whatever
in
here
like
this
is.
This
is
truly
like
the
first
ultra
prototyping
kind
of
thing,
but
the
the
point
of
this
to
a
certain
degree
is
you
know
I
I
hooked
into
github,
because
it
was
convenient
because
I
didn't
want
to
do
user
management,
but
but
sso
was
a
full
enterprise-grade
fully
highly
available.
B
You
know
idp
solution,
so
if
you
were
operating
at
the
scale
of
you
know
blizzard
or
you
know,
epic
or
whoever
like
you
could
be
running
this
to
do
all
of
your
user
management,
but
it
can
also
do
all
the
certificate
and
other
things
too,
and
so,
when
we
get
into
it,
we're
gonna
try
and
use
this
to
do
like
inter-component
certificate
communication
for
security
purposes.
B
Right,
like
you,
know,
service
a
should
talk
to
service
b,
but
they
should
be
validating
that
you
know
they're
allowed
to
talk
to
each
other
and
and
all
that
kind
of
other
stuff.
So
you
know
this
is
a
good
foundation
for
this
type
of
thing.
You
know
there
are
services
out
there
that
provide
this
via
software
as
a
service,
but
you
know
your
cost
on
that
scales
linearly
with
utilization.
B
Your
cost
on
red
hat
single
sign-on
is
zero
because
it's
included
with
openshift.
So
that's
one
thing
to
consider
right.
C
B
C
B
Sinatra
uses
somebody
wrote
a
streaming
api
for
sinatra
that
makes
use
of
the
streaming
feature
of
browsers
and
basically
it's
using
event,
source
and
javascript
to
subscribe
to
the
stream.
The
thing
about
streams
is
that
they're,
not
bi-directional
so
web
sockets
are
bi-directional.
C
B
Right
so
it
goes
both
ways.
The
stream
is
basically
like
just
a
subscription
only
right,
so
my
browser
has
an
event
source
tied
to
this
endpoint,
and
so
when
the
sinatra
server
barfs,
something
out,
it
knows
what
clients
are
registered
and
it
sends
it
to
all
of
them.
B
B
But
we
think
there
are
other
ways
to
do
that
kind
of
thing
right
and
so
yes,
very
true,
roddy
posted
in
the
and
the
twitch
chat.
Key
cloak
is
the
upstream
community
project
for
red
hat
single
sign-on,
and
so,
if
you're,
not
currently
a
red
hat
customer
or
you
just
want
to
play
around
with
it,
you
don't
have
open
shift
whatever
it
is.
B
B
B
What
I
don't,
I
don't
know
why
I
typed
that
in
a
search
engine
expecting
it
to
come
up,
it's
like
in
my
google
drive.
Does
anybody
have
the
google
drive
link
handy
if
not
I'll,
pull
it
up
from
my
other
browser.
B
Yeah,
the
google
doc
with
the
game
I'm
trying
to
find
it
here.
F
B
The
funny
thing
is,
I
can't
I
can't
edit
it
myself,
because
I
haven't
shared
it
with
my
red
hat
self.
B
And
so
one
of
the
things
we
we
had
talked
about
on
the
last
stream
when
we
were
kind
of
working
through.
I
shouldn't
do
that.
I
should
assume.
B
Better,
so
we
came
up
with
this
idea
for
like
a
battle,
royale
kind
of
spaceship
battle
thing,
and
we
talked
about
a
bunch
of
stuff
and
so
a
couple
of
things
that
we
added
from
last
time's
conversation,
and
this
goes
to
derek
a
little
bit.
I
added
the
two
things
I
added
permadeath
and
I
added
roguelike,
and
so
the
reason
for
permadeath
is
like
well.
C
G
We
did
we
did
the
one
exceptions
we
were
talking
about
carrying
over
any
money,
you
may
have
earned
or
resources
you
may
have
earned.
So
while
you
don't
get
to
keep
the
ship
and
everything
you
put
into
it,
you
don't
start
from
zero.
When
you
respond.
B
Yeah,
I
don't,
I
don't
know
all
right
so
we'll
we'll
circle
back
to
that
one,
because
I
think
the
the
roguelike
piece
comes
into
play
a
little
bit.
One
of
the
things
you
had
put
in
here
derek
was
some
some
design
and
gameplay
references,
and
I
I
think
that
both
star
control,
origins
and
star
control
2.
They
had
this
like
top-down
spaceship
battles
thing
going
on
where
you
know
you
just
kind
of
fly
around
and
shoot
the
other
person
and
your
ship
has.
B
You
know
a
couple
different
weapons,
but
the
thing
I
liked
about
what
they
added
in
origins
was:
there's
like
power
ups
and
there's
some
other
elements
in
this
in
the
map.
If
you
will
that
you
can
interact
with
and
the
map
itself
is
not
infinite
right.
So
so
much
like
a
true
battle,
royale
there's
some
edges
to
the
map,
and
so,
if
you
go
outside
the
edges,
you
just
you
die
right,
you're
not
allowed
to
to
go
there.
B
So
so
we
can
constrain
the
playing
area
and
then
either
battle,
royale
style
or
star
control
style
like
you
can
pick
things
up,
and
so
one
of
the
concepts
in
star
control
is
this
concept
of
like
precursors
where
there's
this,
this
old
leftover
technology?
That's
you
know
you
can
find
it.
I
think
galactic
civilizations
had
a
similar
thing
and
a
bunch
of
games
have
this
concept,
but
in
the
initial,
like
you
first
come
into
the
game.
B
You've
never
played
it
before
it's
your
first
time,
you're
in
an
escape
pod,
with
basically
a
peashooter
like
trying
to
just
kill
other
people
with
peashooters.
If
it's
a
bunch
of
people
with
peashooters
like
that's,
going
to
get
really
lame,
maybe
really
fast.
So
I
don't
know.
Maybe
we
need
some
kind
of
like
power,
uppy
things
or
something
I
don't
know.
G
Games
that
I
assigned
out.
B
G
B
There
was
a
game
that
was
like,
it
was
an
rts
and
you
were
on
a
planet.
D
G
People
that
did
work
on
ta
yeah
mike
robinson
did
the
ai
for
that
yeah.
It
was
a
pretty
cool
one.
It's.
B
Right
yeah,
I
played
it
when
it
was
really
early,
but
anyway
no,
I
have
not
gotten
to
play
any
of
the
homework
games.
So
what
what
were
you
going
to
draw
parallels
to
with
that.
G
One
of
the
smaller
starcraft
2
free
games.
Actually
I
really
like
the
way
that
the
gameplay
is
handled
where
most
of
what
you're
doing
as
a
player
is
thinking
about
positioning
and
maneuvering
and
less
about
like
trying
to
target
right
so
especially
like.
If
you're
gonna
play
this
on
a
mobile
phone
or
you
know.
G
On
a
desktop
right
like
not
having
to
have
those
twitch
skills
as
much
but
thinking
about
like
upgrading
and
positioning
and
what
sort
of
encounters
you
want
to
be
a
part
of
to
me
that
makes
it
a
little
more
accessible
right
and
that
solves
the
problem
of
like
us
having
to
write
code
to
handle
point
and
click
targeting
or
something
like
that
right.
We
can
just
run
that
in
the
sim
on
the
server.
C
B
The
things
about
radius
raid
is
like
your
ship,
has
no
inertia,
so
it's
wasde
control
but
like
if
you
press
w,
you
go
left
instantly
and
stop
instantly,
which
is
sort
of
unrealistic
for
what
we're
trying
to
achieve
with
a
game.
That's
all
about
kind
of
gravity
stuff,
and
so
what
I
was
thinking
is,
you
know,
star
control,
origins
and
similar
games
like
that,
a
and
d
rotate
you
and
then
w
and
s
are
kind
of
thrust.
B
And
so,
if
you
think
about
that,
it's
basically
like
you
have
to
turn
the
ship
well
whatev
wherever
the
weapon
is
on
the
ship.
When
you
press
the
button
to
fire
it
shoots,
and
if
it's
pointed
in
a
certain
direction,
then
the
projectile
goes
where
it
goes
right
and
so
to
your
point,
derrick,
when
the
player
presses
the
shoot
button.
The
server's,
like
okay,
this
player,
shot
like.
B
D
B
And
I
don't,
I
don't
think
that
that's
and
the
other
thing
that
we
can
do
is
because
it
gets
complicated.
If
you,
if
you
really
go
into
this
but
like
if
the
projectiles
just
move
slowly,
then
there's
we've
got
more
time
to
process
them.
B
C
B
B
B
You
know,
object,
relational
mapping,
and
you
know
all
this
other
stuff,
whereas
you
know,
and
the
data
grid
is
just
a
key
value
store,
and
so
we
can
just
serialize
everything
as
as
basically
json.
You
know
and-
and
I
think
there's
you
know-
there's
even
a
way
to
do.
Protobuf
type
stuff.
B
Yes,
exactly
exactly,
and
so
if.
E
B
All
right,
we
can
now
install.
A
D
F
B
B
And
so
replicas
you
could
set.
You
know
three
diner.
However
many
you
wanted
and
and
said
a
whole
bunch
of
other
stuff,
we'll
just
do
one
for
now,
but
basically
you
know
you
can
fully
distribute
this
thing
with
lots
of
replicas,
and
so
you
know,
if
one
instance
goes
out,
you
don't
have
to
worry
about,
you
know
losing
data
or
whatever.
If
you
need
more
throughput,
you
just
create
more
of
them
all
that
kind
of
fun
stuff.
A
Yeah
I
was
gonna.
I
was
thinking
about
the
stateful,
how
we
want
to
manage
the
state
of
the
entire
game
world
we're
using
infinispan.
We're
probably
gonna
want
to
have
like
the
the
local
server
just
broadcasting
out
the
state
of
what's
in
that
sector,
but
also
persisting
if
the
the
larger
world,
which
is
going
to
be
in
data
grid,
which
would
we
could
use
data
grid
for
just
for
performance
just
just
for
for
optimization.
You
know
we
wouldn't
want
to
be
broadcasting
the
state
of
everybody
all
the
time.
Those
messages.
B
Yeah,
so
I
think
I
think
we're
yeah.
So
what
you're
describing
is
sort
of
like
and
maybe
there's
a
game
terminology
word
for
it,
but.
B
But
basically
the
thing
that
lives
in
the
data
grid
is
like
the
end
state
of
your
last
play
session,
and
so
when
you
join
a
new
play
session
and
you
get
assigned
to
a
sector
that
server
fetches
the
information
about
you
from
the
data
grid
and
then
it
does
its
own
thing.
While
it's
doing
its
thing
and
then
at
the
end
of
that
session
or
at
the
end
of
your
yeah,
basically
the
end
of
your
session.
A
B
That
make
sense,
I
don't
I
don't
know
that
what
we
said
is
meaningfully
different.
A
B
F
D
B
A
A
B
G
G
A
E
A
C
C
Get
the
link
change
to
anyone
with
the
link.
Anyone
with
the
link
on
the
internet
can
view
now
anyone
can.
F
C
F
C
A
C
C
C
B
C
A
G
The
shape
of
the
area
right,
the
gameplay
is
going
to
decide
that
I
don't
think
technology
wise,
there's
necessarily
any
restrictions
right.
Besides,
like
the
largest
space
that
you
know
a
device
could
handle
or
that
the
server
could
control
yeah
right,
it
doesn't
matter
so
they
could
be
circles,
they
could
be
squares,
they
could
be
hexagons,
they
could
be
oblong,
rectangle
things
the.
B
Point
is
that
every
ring
the
the
more
rings
there
are.
The
more
sectors
there
are
like
each
ring
doesn't
have
an
equal
number
of
sectors.
B
Yeah
yeah,
and
so
I
think
the
point
is
like
if
you
as
a
player,
you
know
if
you
end
up
here
right,
like
you
get
dropped
here,
can
you
choose
to
go
here
or
here
or
do
you
have
to
destroy
everybody
in
your
sector
before
you
can
then
move
to
the.
A
B
B
A
E
A
So
what
I
was
thinking
was
we,
let
players
move
inward,
like
we
just
said,
but
they
can't
go
outward
and
they
get
pulled
inward,
the
more
massive
they
get
and
right
they
can
get
pulled
like
if
they
killed
a
bunch
of
people
really
fast
in
their
sector
and
their
mass
hit.
The
threshold
they're
gonna
get
pulled
in
out
of
their
section.
C
A
B
A
When
all
the
time
player
crosses
over
they're
gonna
have
to
get
all
the
states.
B
A
D
G
Have
to
be
to
the
left
or
the
right
or
whatever
we
could,
it
could
always
be
up.
You
know,
whichever
way
right
orientation
doesn't
matter,
but
whatever
way,
all
players,
all
players
in
the
entire
area
are
moving
towards
that
same
direction,
velocity
affected
by
mass
and
then
any
other
additional
movements
they
make
are
on
top
of
that,
so
you
can
think
of
it
as
like
airplanes
in
a
jet
stream
right.
G
G
So
all
the
gameplay
happens
with
everybody
collapsing
essentially
inwards
in
a
specific
direction
towards
each
other,
and
at
some
point
you
will
have
to
destroy
all
other
players
because
you
won't
be
able
to
escape
them
right.
If
it's
just
the
two
of
you
right,
you
two
are
going
to
be
moving
towards
that
position.
Where
inevitably
there
will
be
conflict,
a
player
will
win
and
then
you're
on
to
the
next
section.
C
B
G
B
G
Not
necessarily
right,
I
mean
yes,
we
want
that
to
happen,
no
matter
what,
because
it's
a
conflict-driven
game
right,
you
can't
be
a
player
in
this
game
and
just
avoid
conflict.
The
whole
time
right,
but
your
your
control
over
the
rate
at
which
you
enter
conflict,
is
going
to
be
the
direction
in
which
you
push
your
vehicle
right,
which
you
push
your
spaceship.
G
So,
if
you're
someone
who's
constantly
putting
full
thrust
against
that
inertia,
right,
you're
gonna
be
the
last
player
to
arrive
in
the
center,
but
that
also
reduces
your
chances
to
pick
up
additional
resources
to
improve
your
ship.
So
you'd
be
gambling
that
the
other
players
that
have
made
it
to
the
center
are
weak
enough
for
you
to
handle
at
that
point
right
and
that's
where
you
still
have
that
player
agency
and
choice.
B
Yeah
I
get
I
get
what
you're
saying.
I
think
that
leads
us
to
an
issue
of
maximum
number
of
players
in
a
sector.
G
Which
yeah
the
answer
to
that
is:
what
can
we
handle
right?
What
can
the
architecture
of
our
game,
especially
if
we're
going
to
like
write
something
unlike
node
or
something
right,
performance,
wise
cluster-wise,
like
what
can
each
one
of
these
individual
microservices
handle
and
that's
our
limit
right
and
we
can
always
scale
it
up
in
the
future
as
we
optimize
our
code
or
you
know,
improve
it
that
sort
of
thing.
The
second
answer
to
that
too,
of
course,
is
play
it
what's.
Fun
right
is
10
000,
all
in
the
same
space
fun,
maybe
not.
B
Level
in
call
of
duty
that's
out
right
now,
where
it's
like
16
players,
8x8
or
like
10
versus
10,
but
the
game
space
is
like.
You
can
pretty
much
see
across
the
entire
map
from
every
point
on
the
map,
and
so
it's
just
you're
just
getting
killed,
constantly
and
respawning
instantly.
It's
it's!
It's
not
it's!
B
Some
people
are
into
it
and
it's
fun,
but,
like
I
can
see
how
you
know,
extreme
number
of
players
in
one
sector
at
one
time
is,
is
potentially
not
no
bueno,
but
so
so
you
derek
seem
to
be
aligning
with
jared's
trope
of
like
yes,
you
can
just
pilot
your
ship
around
kind
of
wherever,
and
so
at
any
moment
you
may
end
up
in
it.
It
could.
B
An
individual
sector,
because
at
that
point,
if
you're
just
getting
pulled
in
all
the
time
and
like
you,
can
just
kind
of
power
your
way
out
to
a
certain
degree
depending
on
how
heavy
you
are
you,
what
is
the
point
of
a
sector
at
that
point
other
than
a
construct
for
us
to
give
servers?
B
You
know
something
to
do
from
dividing
the
the
space
perspective.
I
don't
think.
G
A
center
at
that
point
is
a
gaming
element.
The
gravity
that
is
in
each
sector
right
is
an
implementation
of
the
circles
that
you
might
find
in
other
battle,
royales
right,
it's
the
gameplay
space
restriction
mechanic
and
so
regardless.
Inevitably
and
again,
this
will
have
to
be
like
what
feels
fun
right.
Maybe
it's
two
minutes.
Maybe
it's
six
minutes!
You
know
a
shorter
time
to
me,
isn't
better,
especially
for
something
that'll
be
played
on
a
cell
phone.
Inevitably,
you
will
be
into
conflict
with
every
other
player
in
your
sector.
G
You
just
get
to
decide
that
rate
by
choosing
you
know.
Are
you
going
to
go
towards
the
gravity?
Well,
in
other
players
or
away
from
them
and
if
you're
going
away
from
them,
then
you
know
within
two
minutes
or
whatever
you'll
still
be
drawn
into
the
conflict
and
they
either
be
destroyed
or
advanced
to
the
next
sector.
G
B
Yeah,
so
so
the
question
I'm
asking
is:
if
I'm,
the
yellow
dot,
can
I
actually
do
this
from
a
movement
perspective.
F
G
G
If
you
leave
that
space
you
enter,
you
know
a
transitionary
area
where
you
don't
encounter
players
until
you
start
encountering
them
again
right
then
you're
opening
up
a
lot
of
different,
like
communication
questions
to
help
the
player
understand
what
they're
doing,
and
this
might
be
a
matter
of
game
design,
but
I'm
always
I'm
always
for
like
make
it
simple.
First
right
solve
the
gameplay
mechanic
that
is
in
front
of
you
and
don't
add
additional
ones
on
unless
you
need
to
solve
another
problem
like
what
is
the
problem
you're
trying
to
solve.
A
The
mechanic
you
were
proposing
is,
from
simplicity,
point
of
view.
It's
they're
both
just
different
mechanics.
B
B
B
Describing
is
essentially
you
you
start
somewhere
and
then
you're
getting
sucked
in
sort
of
no
matter
what
and
to
a
certain
extent
as
long
as
you're
light
enough,
you
can
kind
of
like
stay
where
you
are
ish,
but
eventually
you
get
pulled
in
the
the
other
caveat
to
that
is
like
when
enough
players
are
in
the
game,
you
kind
of
have
to
start
everybody
like
really
far
out.
B
So,
if
you
look
at
jared's
picture
in
the
upper
right,
where
you've
got,
you
know
three
rings
or
four
rings,
or
ten
rings,
like
the
newest
players,
start
the
furthest
out,
but
they're,
theoretically,
the
same
weight
as
people
who
are
closer
in
because
we
needed
to
start
them
further
out
so
that
you
know
players
who
were
already
playing.
B
A
F
B
Well,
yeah,
so
that's
one
aspect
of
it
but
say
the
game
has
been
going
on
for
a
while
and
you've
got
10
10
rings
right
and
so
new
players
are
starting
out
at
ring.
10
and
somehow
you
know
some
schlub
who
started
early
on
like
avoided
getting
sucked
in
to
the
center
and
so
they're
sitting
at
ring
three,
and
so
now
the
person
that
fought
their
way
from
ten
down
to
three
is
really
big
and
there's
this
like
tiny
little
schlub
who's
still
hanging
out
in
rank
three.
B
A
We
do
it
as
a
as
a
battle
royale,
like
kind
of
design,
a
session
like
starts
and
everyone
starts
equal
and
then
it
has
a
beginning
and
an
end
or,
and
so
everyone
would
start
like
you
would
like
there
would
be
no
one
people
starting
later
than
others.
Everyone
starts
at
the
same
time.
That's
how
battle
royales
work
like
everyone,
the
game
begins.
Everyone
joins.
C
G
Well,
for
each
section,
so
I
mean
that's,
that's
like
a
question
of
what
does
the
power
curve
of
the
game
look
like
and
what
is
the
progression
mechanic
right
and
to
me,
the
answer
to
that
is:
there's
always
a
set
number
of
rings
to
the
center
right,
like
that,
drawing
in
the
top
right
like
if
we
decide
you
know,
power
creep
wise,
like
there
are
five
rings
to
the
center.
You
must
always
go
through
five
battles
before
you
fight.
G
You
know
in
a
battle
that
has
people
that
have
fought
other
five
battles
right
and
at
that
point
it's
no
longer
about
like
what
additional
mass
you
can
put
to
your
ship
you've
hit
the
mass
limit
you're
in
the
center
of
the
galaxy
or
the
center
of
all
the
rings
or
whatever
right
you're
at
your
mass
limit.
You
can't
go
any
further.
Maybe
it's
because
you
fall
into
a
black
hole
whatever
you
know,
but
regardless
you've
hit
that
power
level,
and
so
now
it's
all
about
tactics.
G
It's
all
about
how
you
built
up
your
ship
over
that
time
period
right
and
at
that
point,
you've
hit
that
top
level
right
once
that
battle's
complete,
congrats,
you've
won.
You
know
winner
winner
chicken
dinner
right.
You
have
this
banner
and
whether
that
means
you
stay
there
and
you
continue
fighting
those
top
tier
battles
right
or
you
get
destroyed
right.
That's
that's
up
to
you
playing
the
game.
B
B
Has
an
interesting
idea
he's
like
what,
if
there's
a
total
mass
in
existence,
but
if
you
start
earlier,
you
get
more
mass
more
quickly
and
if
you
start
later
it
just
takes
you
longer
to
get
that
same
amount
of
mass.
So
it's
like
the
the
mass
that
you
get
agreeing
with
derek
there's
like
some
maximum
theoretical
limit
and
the
mass
that
you
acquire
is
proportional
to
how
far
you
started
away.
B
So
if
you
started
far
away
in
ring
10,
you
don't
get
a
lot
of
mass
as
you
move
to
ring
nine,
and
you
don't
get
a
lot,
you
get
a
little
more
as
you
move
to
ring
eight
so
that
the
person
that
started
at
ring
three
and
ended
up
in
ring
one
they're
super
heavy
at
ring.
One
and
the
person
who
started
in
ring
ten
and
ended
up
in
ring.
One
theoretically
is
the
same
heaviness.
A
B
B
B
You
know
at
whatever
scale
and
then
at
the
at
the
end
of
that
game
time.
You
know
it's
over.
My
thought
is
more
interesting
is
like
more
like
an
mmo
where
you
know
you
can.
C
B
G
A
Yes,
that
I
I
absolutely
agree
with
you
derek,
so
what
I
was
thinking
with
this
model.
It's
basically
like
a
frat
think
of
it
like
a
fractal,
pretty
much.
If,
if
people
keep
joining
like
millions
of
people,
keep
joining,
you
just
keep,
adding
more
and
more
and
more
and
more
and
more
and
more
sectors
on
the
outer
ring.
A
B
B
To
the
outer
edge
of
the
ring
at
a
given
mass
level,
because
the
other
thing
you
don't
want
is
like
I,
you
know
from
a
combat
perspective,
maybe
we
do
want
this.
I
don't
know
if
I
start
to
go
in
towards
the
center
to
then
turn
around
and
try
and
do
something
to
like
attack
somebody
that's
closer
to
the
center.
C
B
G
Yeah
to
me
this
is
like
I
can
do
it
like
a
quick
coded
demo
or
something
like
just
write,
something
in
javascript
to
kind
of
show
you,
but
when
I
was
talking
about
the
concept
of
like
jets
in
a
jet
stream
right.
The
reason
it's
so
appealing
to
me
is
because,
if
you're
a
passenger
in
those
jets,
you
don't
notice
that
you're
in
the
jet
stream,
because
all
the
other
jets
are
moving
relative
to
you,
they're
all
already
moving
in
that
same
direction.
G
So
as
a
passenger
in
the
movement
right,
the
the
complexity
of
the
scenario
is
greatly
simplified,
you're,
just
in
a
regular
combat
right
and
just
for
some
reason
right-
and
this
is
something
that's
going
to
be
pretty
transparent
to
players
you're
going
to
see
ships
in
the
far-off
distance.
If
you
could
right
slowly.
Moving
closer
to
you.
C
G
Well,
and
that's
kind
of
a
thing
too,
is
like
you:
don't
need
to
have
an
edge
of
a
sector
right.
You
don't
need
to
really
show
anyone
the
edge
once
you
blow
up
that
last
ship
right,
then
maybe
you
get
accelerated
into
the
next
sector
or
whatever,
but
this
is
movement
can
be
a
consistent
thing.
Right
like
this
is
this
is
a
mechanic
essentially
that
we
don't
have
to
implement
in
the
way
that
we're
talking
about
it?
We
just
have
to
communicate
it
to
the
player
in
the
way
that
we're.
B
Other
ships,
you
you
pick
up
fuel
again,
and
so
maybe
there's
a
game
mechanic
later
on
that
we
can
introduce
about
balancing
fuel
utilization
like
you
know,
thrust
costs
fuel,
and
so
you
could
power
your
way
all
the
way
back
out
to
the
end
of
the
sector,
the
outer
edge
of
this
of
where
you
are
so
to
speak.
But
then
you
might
be
out
of
fuel
at
that
point.
So
all
you
can
have
is
gravity.
Pull
you
back
in
and
all
you
can
maybe
do
is
rotate
and
and
shoot
and
hope
kind
of
thing.
C
B
B
F
B
I
want
I
want
to
leave
some
time
for
roddy
to
do
his
demo,
because
he's
got
a
demo
of
dots
moving
around
and
colliding,
which
is
which
is
somewhat
important
but
like
other
than
where
the
dots
are
and
writing.
Maybe
that's
just
where
we
start
right
like
where,
where
the
dots
are
right
like
we
need
a
json
data
structure
or
at
least
a
description
of
some
data
values
that
we
can,
then
you
know
start
putting
into
the
data
grid.
A
And
then
everyone
starts
at
the
outer
ring
when
you
join.
You
always
start
the
outer
ring
in
a
a
sector
that
has
other
players
in
it,
and
then
you
move
towards
the
center
either
like
automatically
like
a
slow
pull
like
derek,
is
saying
or
or
you
reach
a
certain
threshold
and
get
transported
to
the
next
session
sector,
because
your
mass
reaches
a
certain
point,
but.
A
B
Sorry,
I
can
finally
now
write
something
so
I'm
just
like
throwing
bullets
at
the
end
of
the
document,
because
I
don't
have
a
better
place
to
put
them
right
now.
So
this
is
we're
going
to
say
fixed
number
of
rings.
D
B
G
G
Do
get
the
chance
to
allow
edit
access
to
that
doc.
I
wanted
to
get
into
those
design
pillars.
B
Okay,
give
me
a
sec
here.
I
will
do
that.
Send
me
whatever
do
you
want
me
to
share
it
with
your
red
hat
email
address,
or
do
you
want
a
personal
email
address
on
it.
E
F
F
A
B
B
So
core
data
structures
right
so
one
of
the
things
I
talked
to
roddy
about
was
you
know
since,
since
datagrid
is
just
key
value
pairs,
we
may
have
more
than
one
cache,
which
is
like
you
know,
a
database.
If
you
want
to
call
it
that
right
since
we're
using
github
for
auth
right
now,
we
can
and
github
enforces
unique
ids
on
github.
B
I
do
to
go
back
to
a
question
that
jared
had
asked
earlier:
do
we
need
to
store
their
position
constantly
in
the
data
grid?
I
I
kind
of
like
that's
going
to
be
really
chatty.
If
we
have
to
do
that.
A
D
B
You
know
if,
if
the
universe
is
persistent,
players
should
be
able
to
lee.
Like
you
know,
you
can't
ask
them
to
play
for
forever,
like
they
should
be
able
to
leave
with
their
current
status
and
then
come
back
with
their
current
status.
So
it
is
like
right.
Disconnect
just
counts
as
disappear.
So
yeah
I
mean.
A
So
the
whole
and
another
thing
when
joining
to
think
of
this,
like
when
a
new
player
connects
the
server
is
going
to
have
to
decide
which
sector
has
the
appropriate
number
of
players
to
play
place
them
in
because
they
don't
want
to
get
placed
into
an
empty
sector
or
a
full
sector
or
might
have
to
create
a
new
sector
based
on
there's.
No,
like
all
the
servers
sectors
are
full,
so
need
to
spin
up
another
one
or
merge
them
or
whatever
split
them.
B
I
do
well,
but
that's
a
that's
a
question
right
in
an
mmo.
Is
there
other
than
you.
E
B
B
Well,
the
other
thing
I
guess,
but
the
other
thing
is
like:
okay,
it's
a
grid.
We
can
scale
it,
it's
eventually
consistent,
and
so
the
real
question
is
like:
how
long
does
it
take
that
data
when
we're
chatty,
to
persist
to
all
the
instances
and
which
who's
talking
to
which
instances
and
stuff
like
that
and.
A
A
B
B
Request
goes
through
the
service
layer
and
unless
it's
doing
some
kind
of
like
tracking
of
source,
you
know
you
could
you're
just
getting
round
robin.
B
A
B
Was
updated
in
march
cool
javascript
client
over
the
hot
rod
wire
protocol?
Look
at
that.
F
B
B
A
B
A
B
C
E
D
Move
off
the
zoom
stream,
so
I'm
not
streaming
enough
streaming,
yeah,
that's
probably
less
than
useful!
A
Oh
and
roddy
before
you
I
promise
I
haven't
been
drinking
yep.
I
was
trying
to
find
the
code
for
your
demo.
D
Oh,
so
speaking
of
that
right,
so
so,
essentially,
I've
been
going
through
and
making
sure
that
it's
appropriate
to
be
open
sourced
and
has
the
appropriate
licensing
and
all
that
kind
of
stuff
right.
So
I've
completed
the
this
server
which
I've
had
in
my
own
repository
here
under
cms
test,
which
you
can
probably
see
there
now
on
the
left,
I'm
just
going
to
make
it
public
make
public
and
type
the
name.
D
Nope
in
my
own,
at
the
moment,
myself
and
eric
we're
talking
about
that,
whether
we'll
want
to
move
it
over
but
we'll
need
to
decide
whether
this
is
going
to
serve
as
the
basis.
A
D
Sure
yeah,
so
I
added
in
a
readme
here.
So
basically
I
wrote
this
this
server
starting
about
eight
years
ago
in
the
fall
of
2012.,
so
it
goes
back
a
ways
and
around
that
time
I'd
seen
some
game
servers
using
the
active
mq
broker
and
c
plus
plus
clients.
D
So
I
had
this
idea
of
integrating
an
active
mq
broker
for
messaging,
a
c
plus
client
on
the
back
end
for
the
server
so
that
I
could
use
box2d
for
physics
and
then
on
the
front,
end,
use
dot
net
and
integrate
a.net
messaging
client
into
unity.
3D
so
basically
take
a
bunch
of
open
source
tech,
integrate
it
all
and
create
a
multiplayer
game
server
right.
D
So
over
the
course
of
a
few
months
I
put
together
cms
test,
which
is
like
the
cms
comes
from
the
c
plus
plus
messaging
system
for
active
mq
and
then
as
well.
Then
I
put
together
together
the
unity
side
here
right.
So
basically,
what
I'm
going
to
show
here
is,
like
you
can
see
here.
On
the
right
hand,
side
I've
got
like
a
pretty
basic
tmux
session
set
up.
D
D
D
So
then
we'll
switch
back
to
session
one
here,
and
so
then
I'm
just
going
to
run
my
cms
test,
which
is
built
from
this.
This
repository
that
I
just
opened
up
and
basically
what
it
is.
Essentially,
it's
a
wrapper
around
box
2d.
So
it
starts
up
a
world
simulation
and
then
basically
it
has
a
messaging
client
there
that
connects
to
the
broker
on
a
on
a
specific,
like
publish,
subscribe
mechanism,
what's
called
a
topic
and
when
the
player
joins
it
starts
firing
player
simulation
updates
at
the
broker.
D
D
So
I've
got
this
client
in
unity
which
we
can't
open
the
code
for
yet
because
I
found
some
proprietary
stuff
in
there
with
regards
to
the
multi-threading
that
I
need
to
fix
up,
but
essentially
I
took
the
net
messaging
client
integrated
into
unity.
Both
sides
used
protocol
buffers
stomp
protocol.
They
both
meet
at
the
broker
to
receive
to
get
the
world
simulations
out
of
the
game
server
and
to
get
the
input
from
the
keyboard
into
the
game
server.
So,
let's
just
start
up
a
few
instances
here.
D
B
Let
me
I'll
rephrase
the
question.
I
guess
I
I
thought
I
didn't
get
the
answer
I
wanted.
It
said
I
didn't
get
an
answer
that
that
explains
what
I
wanted.
B
Does
it
can
it
do
sni.
F
B
D
D
D
So
I
added
a
little
background
here
today
that
I
got
from
opengamer.org
the
guy
by
the
name,
copyright
ivan
voirol,
just
looking
for
credit,
and
if
you,
if
anybody
may
notice
the
the
little
hexagon
there
I
got
from
that's
the
product.
That's
the
pod
escape
hexagon
yeah.
You
got
it
so
I
borrowed
that
there
earlier
today.
Okay,
so
we
each
get
a
unique
id
which
I've
trimmed
to
be
eight
characters.
These
guys
are
moving
around
each
guys.
D
I
join
in
here
get
them
out
of
the
center
because
I
so
the
tricky
part
is
that
in
the
top
left
in
the
screens,
where
they're
moving
around
there's
actually
a
leave
button
behind
the
grid.
I
didn't
have
time
to
fix
that
earlier
today.
D
So
all
right,
so
we
got
all
our
guys
moving
around
here.
So,
let's,
like
you,
know
we're
building
up
some
momentum,
bang
we
got
kind
of
like
you
know
our
our,
like
eight
ball
pool
scenario
going
on
here
right
now,
just
bouncing
around
right.
D
Like
box
2d
simulated
in
the
background,
applying
forces
to
the
rigid
bodies,
they've
got
friction
and
all
that
kind
of
stuff.
D
A
Got
questions
rob
you'd
like
so
is
this
happening
over
a
socket
stream
right.
D
A
F
A
D
D
Right
so
then
it's
not
just
the
raw
socket.
It's
let's
see
if
I
can
get
the
right.
B
D
Yes,
wasd
right
so
then,
basically
so
here,
I've
got
up
on
the
screen
here
now.
So
the
way
this
is
set
up,
we've
got
like
publish,
subscribe
topics
set
up
for
different
things
right,
so
we've
got
one
which
is
the
world
simulation.
D
D
Internally,
that
maps
into
let's
just
pop
open
the
code
here,
let's
see
if
I
can
show
it
right
quick.
So
this
is
the
c
line,
view
c
line
being
the
jet
brains,
c,
plus
plus
ide.
Oh.
A
D
Right
so
if
we
see
down
the
left
here
so
basically,
we've
got
like
a
main
server
loop
here
and
basically,
like
we've,
got
a
message:
consumer
command,
consumer
command,
q.
We
have
a
world
simulation
and
then
we
have
like
an
update
to
box
duty,
essentially
right,
yeah
and
then
basically
after
we
do
the
the
box
duty,
tick
and
update,
and
then
we
dispatch
the
current
state
back
out
right.
D
So
it's
in
a
way
it's
pretty
dumb,
like
if
you
look
at
the
the
gaffer
on
games,
youtube
video
where
he
goes
through
like
from
gdc,
where
he
does
that
talk
where
he
starts
like
with
a
fully
authoritative
server,
and
he
rolls
around
the
ball.
Stuff
sticks
to
it
and
he
looks
at
all
the
different
kind
of
latency
involved
and
how
much
bandwidth
it
takes
like.
That's
that
that's
the
foundation,
then,
for
you
know,
defying
the
updates
making
them
as
small
as
possible.
C
D
D
B
D
B
You
can
also
spin
up
multiple
caches,
too,
and
so,
instead
of
trying
to
update
everything
in
like
the
main
cache,
like,
maybe
there's
a
game
like
each
game,
server
gets
its
own
view
or
maybe
we
spin
up.
You
know
a
separate
database
or
something
like
for
each
game.
So
you
know
there's
there's
ways
we
can
figure
out
the
that
problem.
A
G
I
mean
the
way
I
typically
like
to
do
it,
especially
for
web-based
games.
Is
I
like
to
have
a
sync
step?
That's
usually
at
like
the
500
millisecond
mark,
that's
a
tcp
communication.
That's
a
game
sync
and
then
in
between
that
I
like
to
have
all
the
udp
actions.
So
that
means
you
know
every
500
milliseconds
the
game's,
pretty
much
resynced
on
the
player's
side
and
then
as
much
as
you
know,
the
udp
actions
that
they
can
get,
as
you
know,
keeps
the
game
performant
and
up
to
date.
G
That
being
said,
I
want
to
take
a
second
because
we
had
some
comments
in
twitch
chat
about
people
being
new
to
game
design
right
and
kind
of
point
out
a
couple
things
here.
First,
one
is
the
when
we
say
gameplay
loop,
we're
talking
about
that,
while
loop
in
the
code,
basically
every
game,
whether
it's
a
client
or
a
server,
has
a
loop
where
it
just
goes
through
and
updates
the
simulation
updates,
the
universe
and
that's
basically,
all
you
need
for
a
video
game.
G
So
each
one
of
these
steps
here,
you
know,
understand
the
network
stack,
communicate
with
anything
else.
Do
your
simulations
update
everything,
that's
going
to
be
displayed
and
send
it
out
right,
it's
the
same
if
it's
on
a
client
or
a
server
essentially,
and
that's
what
the
game,
the
game.
D
Yeah,
the
only
difference
is
here:
we're
going
through
the
tcp
stack,
we're
going
down
the
tcp
stack
onto
the
network
into
the
client
up
the
tcp
stack,
and
then
we
update
right.
You
just
have
an
extra
somewhat
complicated
step
in
the
middle
yeah,
so
yeah,
so
so
I'll
just
pop
up
the
unity
side,
even
though
I
can't
completely
open
source
it
here
now,
but
we
should
be
able
to
run
through
unity
here
as
well
and
join.
D
Connect
join
yeah,
so
here
we
are
in
unity
as
well.
I
can't
actually
see
the
other
players
because
they're
too
far
out
at
the
moment,
I
think
I'll
move
them
off
the
screen,
but
essentially
like
it's
a
pretty
standard
unity.
Layout
we've
got
some
code
in
there.
We've
got
some
prefabs
and
we've
got
some
scenes
right.
D
The
key
part
here
is
like
the
from
the
networking
point
of
view
is
the
is
the
messaging
client
and
then
the
protocol
buffer,
stuff
right
and
then
I
think
for
graphics.
D
Here
I
was
using
something
called
futile,
which
was
like
a
a
small
2d
plug-in
to
simplify
doing
2d
and
unity
because
background
2012
2013
it
wasn't
nearly
as
powerful
as
as
it
is
now,
so
that
was
done
and
open
source
by
somebody
named
matrix,
who,
if
you
remember,
train
yard
back
from
the
early
ios
days,
that
was
like
his
first
big
hit
in
mobile
cool,
so
yeah
so,
like
I
said,
there's
a
bunch
of
stuff
in
the
code
there.
Let's
see,
if
I
feel
like.
D
If
you
look
at
the,
if
you
look
at
the
protocol
buffers
the
protocol,
buffers
is
a
google
thing,
so
like
it's,
the
foundation
for
grpc,
for
example,
so
they're
pretty
they're
pretty
concerned
about
their
serialization
right.
So
one
of
the
things
you
can
do,
you
can
set
the
the
size
of
the
fields
to
be
fixed
to
certain
decimal
lengths
so
that
you
can
better
pack
the
data
so
that,
like,
if
there's
a
certain
precision,
you
don't
need
just
cut
it
off
and
that
way
you
can
pack
it
into
the
least
number
of
bits
possible.
G
G
Development
is
premature,
optimization
and
you
can
encounter
that
in
any
programming
world,
but
especially
game
development,
and
so
that's
something
that
you'll
kind
of
see
us
do
is
we'll
just
kind
of
like
sketch
out
something
we'll
talk
about
some
of
the
performance
traps
with
it.
But
when
we
actually
come
down
to
like
writing
the
code,
we're
not
going
to
optimize
stuff
until
we
need
to
in
order
to
keep
the
velocity
and
development
where
we
want
it
to
be
yeah.
A
D
D
C
B
So
that's
it!
That's
a
good
question
in
our
last
in
our
tale
15
minutes
right
like
what
what
is
the
logical
next
step.
So
I
know
roddy,
like
you,
had
kind
of
dusted
this
stuff
off,
but
you
don't
have
a
ton
of
time
to
work
on
the
server
client
side.
You
know
jared
and
another
another
gentleman
michael.
I
can't.
A
Yeah,
looking
at
his
code,
didn't
look
too
hard
to
understand,
but
the
cool
thing
that,
like
that,
I
really
like
about
roddy's
prototype.
That
he's
got
already.
Is
it's
socket-based?
That
was
the
one
thing
I
was
going
to
say
when,
when
we
were
talking
on
chat,
it
sounded
like
we
were,
making
http
rest
calls
to
synchronize
stuff
and
that's
going
to
be
way
too
slow
like
it
has
to
be
a
socket
and
a
real-time
stream,
like
everything.
C
A
Yeah,
so
if
he's
already
got
is
running
over
a
socket,
even
if
it's
on
messages,
it
seems
like
it's.
It's
still,
performant
like
it's,
and
and
also
on
top
of
that
you
get
that
bonus
of
the
the
automatic
binary
packing
of
messages
which
we
talked
about,
which
isn't
important
at
the
beginning.
But
it
still
means
we're
trying
to
design
something
scalable
and
that's
absolutely
something
you
need.
If
you
want
to
be
like
thousands
of
people
playing
and
have
it
be
perform
it.
So
I'm
still
so
I
I
wouldn't.
A
D
D
So
so
maybe
it
fits
in
in
the
right,
the
right
era
of
your
c
plus
false
knowledge,
because
it
certainly
does
for
me
so
of
course,
there's
been
c,
plus,
plus
14
and
c,
plus,
plus
17,
and
there
all
the
compilers
are
working
on
being
20
compliant.
Now,
so
there's
been
a
lot
of
additions
to
the
language.
G
G
Worried
because
it's
not
like
we're
in
a
hackathon
or
something
where,
like
your
prowess
in
the
language,
is
being
judged
right,
we're
trying
to
trying
to
ship
a
demo
we're
trying
to
ship
a
game.
So
we
don't
need
to
do
fancy
templating.
We
don't
need
to
do
any
sort
of
crazy
build
system
right.
We
just
need
to
get
it
working,
clean
and
simple
and
easy
to
reproduce.
B
D
B
Is
like
you
know,
what
does
the
server
need
to
know
about
the
user
who
connected
via
the
client
and
that's
where
that's
why
I
was
concerned
about
the
data
structure
thing
was
like
you
know
I
I
can
create
when
the
user
logs
into
the
lobby,
we
can
query
the
data
grid
and
find
out
like
does
the
user
have
an
account
in
the
data
grid?
You
know:
okay,
let's
initialize
them
to
the
basic
state
which
is
like
some
place
in
the
universe.
D
I
think
you
just
need
to
spend
some
time
figuring
out
what
the
integration
steps
are
right,
like
the
lobby,
even
from
a
messaging
point
of
view,
there's
ruby
clients
right
if
we
needed
to
do
that,
it's
possible
from
a
technical
point
of
view.
D
D
At
some
level,
it
is
because
you
have
to
render
using
unity
stuff
in
the
unity
engine.
You
have
to
have
cameras
and
all
that
kind
of
stuff
yeah,
but
I
think
the
most
part
of
it
might
be
able
to
move
to
godot.
B
D
D
G
A
B
B
A
D
D
A
B
A
B
D
Just
for
one
other
alternative
on
the
table,
like
one
other
thing
that
we
could
do
is
take
the
existing
server,
which
has
all
the
messaging
technologies
and
protocol
buffers
and
all
that
goodness
in
there
and
turn
it
around
and
bolt
the
front
end
on
right.
It's
a
it's,
a
more
minimal
thing.
It's
then
you're
in
one
language
instead
of
multiple,
but
we
don't
get
the
win
of
being
in
godot
with
its
community
and
the
familiarity.
D
D
G
So
it's
just
we're
saying
that
that
being
said,
I
was
gonna,
make
an
ms-dos
client
real
quick.
So
you
know.
D
A
G
B
B
Is
there
not
a
way,
because
all
we're
really
trying
to
do
on
the
client
side
for
the
mvp,
like
demo,
is
take
keyboard,
input
and
show
things
on
the
screen
and
so.
D
A
B
B
A
D
So
the
question
is
the
one
great
thing
that's
about
protocol
buffers
is
that
once
you
write
the
protos
right
like
so
protocol
buffers
have
their
own
explicit
message,
format
text
file
right,
so
I
just
dropped
the
link
in
there.
I'll
drop
it
in
main
chat
too.
So
you
have
a
dot
proto
file
and
you
run
a
proto
compiler
which
basically
for
the
given
languages
that
are
supported,
which
there's
a
long
list
so,
for
example,
c,
plus
and
c
sharp.
D
In
this
case
you
run
a
compiler,
the
c
plus
plus
proto
compiler
on
the
protofile,
and
it
dumps
you
out
a
builder
like
the
builder
pattern
that
then
you
use
the
builder
to
basically
fill
those
data
structures
right
and
to
use
them
and
then
c
sharp
wise.
You
also
run
the
protobuffer
compiler
on
the
protofile
and
it
gives
you
a
c
sharp
builder,
which
you
also
use
to
then
access
the
same
data
right.
D
B
Let's,
let's,
let's
se,
let's
target
that
as
the
next
kind
of
thing
for
next
month
is
like
we've
got
a
basic
data
structure
figured
out.
We've
got
the
basic
lobby.
If
we
do
it
in
the
browser
with
just
javascript,
I
can
send
the
user
from
the
lobby
to
a
client
instance
in
their
browser,
because
we're
already
in
the
browser
for
the
lobby,
and
so
it's
basically
just
like.
We
need
to
figure
out
the
the
api
spec
for
communicating
back
and
forth,
with
which
it
sounds
like
it's
already
there.
D
B
Of
it,
but
it's
pretty
much
like
okay,
when
I
hit
w
this
has
to
be
sent.
When
I
you
know,
and
then
when
I
see
this,
it
means
the
other
players
or
wherever
you
know.
Maybe
we
can
have
a
prototype
of
the
same
game
server
as
it
stands
now
and
amq
and
we'll
just
get
it
all
running
in
open
shift
and
then
just
have
a
web
browser
pure
javascript
front
end.
Does
that
sound
like
a
theoretical.
G
B
G
A
B
B
Because
they
just
have
to
speak
the
same
api
and
then
it's
just
a
matter
of
like
all
right
in
the
lobby.
If
you
want
to
run
your
godot
client,
you
just
need
this
url
or
whatever.
We
can
figure
that
out,
so
that
it
launches
the
godot
client.
You
know
xdg
open
kind
of
thing
and
then
you
can
have
whatever
cool
awesome
graphical.
You
know
wizardry
and
sound,
and
you
know
all
the
other
things
not
that
you
can't
do
those
with
javascript.
B
B
Yeah,
so
this
was
a
fun
episode.
Thanks
for
joining,
we
had
you
know:
20
30
people
the
whole
time,
which
is
pretty
cool,
hi
mom.
If
you're
watching-
I
guess
I
don't
know
but
yeah
so
we'll
see
you
all
next
month.
It
might
not
be
a
full
four
weeks
because
we
got
a
little
off-kilter
due
to
some
scheduling
stuff
by
all
means
stay
tuned
to
other
things
on
openshift
tv
and
if
I
could
figure
out
how
to
send
a
rave,
a
raid
rave
send
a
raid
to
another
channel.
B
I
would
but
I
don't
know
how
to
do
that
from
restream.
So
thanks
again
for
watching,
we
will
be
with
you
again
sometime
soon
and
I
will
go
to
the.