Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ebitenのマルチプレイ対応 | WebSocketの活用
Search
ponyo877
March 29, 2024
Technology
0
330
ebitenのマルチプレイ対応 | WebSocketの活用
【ゲーム開発/Go】Ebitengine ぷちConf #2【ゆるいLTと交流会】
https://gocon.connpass.com/event/306765/
ponyo877
March 29, 2024
Tweet
Share
More Decks by ponyo877
See All by ponyo877
GoのWasmでWebRTC P2Pで通信する
ponyo877
0
340
Other Decks in Technology
See All in Technology
エンジニアリングマネージャーはどう学んでいくのか #devsumi / How Do Engineering Managers Continue to Learn and Grow?
expajp
4
1.3k
Git 研修 Basic【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
310
Classmethod Odyssey 登壇資料
yamahiro
0
390
たくさん本を読んだけど 1年後には綺麗サッパリ!を乗り越えて 学習の鬼になるぞ👹
yum3
0
160
簡単に始めるSnowflakeの機械学習
nayuts
1
190
コンテナ・K8s研修 - 前半 コンテナ基礎・ハンズオン【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
170
初中級者用如何使用backlog -VALE TUDOEDITION-
in0u
0
140
Azure Pipelinesを使用したCICDベースラインアーキテクチャ実践
yuriemori
0
190
AOAI Dev Day LLMシステム開発 Tips集
hirosatogamo
15
3.8k
CTOから見た事業開発とプロダクト開発 / My Perspective on Business and Product Development as CTO
keisuke69
4
960
20240724_cm_odyssey_hibiyatech
hiashisan
0
110
JBUG岡山 #6 WordCamp男木島の チームビルディング
takeshifurusato
0
150
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
26
1.6k
Stop Working from a Prison Cell
hatefulcrawdad
266
20k
GraphQLとの向き合い方2022年版
quramy
36
13k
Building Applications with DynamoDB
mza
89
5.8k
Bash Introduction
62gerente
607
210k
The Brand Is Dead. Long Live the Brand.
mthomps
52
36k
The Invisible Customer
myddelton
117
13k
In The Pink: A Labor of Love
frogandcode
139
22k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
105
6.8k
Debugging Ruby Performance
tmm1
71
11k
A better future with KSS
kneath
231
17k
Designing Experiences People Love
moore
136
23k
Transcript
ۚ QPOZP FCJUFOͷϚϧνϓϨΠରԠ 8FC4PDLFUͷ׆༻
ϚϧνϓϨΠ w ϚϧνϓϨΠͱਓҎ্ͷϢʔβͰڠ ྗɾରઓ͢Δ༡ͼํ w FCJUFOͷطଘͷήʔϜγϯάϧϓϨΠͷ ͷ͕େ w zෳਓͰͷ௨৴zΛݟͤΔͨΊʹΩϟϥΫ λΛͬͨνϟοτΛ࡞
ϚϧνϓϨΠΛࢧ͑Δٕज़ w 8FC4PDLFU Σϒιέοτ w ΫϥΠΞϯτͱαʔόؒͰํ ʹϦΞϧλΠϜʹσʔλΛΓऔ Γ͢Δٕज़ Ҿ༻IUUQTTIVLBQJODPNJOGPHSBQIJD*5XFCTPDLFU
8FC4PDLFUY(P w ΫϥΠΞϯτͰ͋ΔFCJUFOͷଞʹ8FC4PDLFUαʔό͕ඞཁ w ΫϥΠΞϯτͱαʔό͕ͲͪΒ(PݴޠͰॻ͚ΔͷͰπʔϧϓϥΫςΟε ͕࠶ར༻Ͱ͖ɺΓସ͑ͷετϨε͕গͳ͍ w (PͷHPMMJSBXFCTPDLFU ˑL Ͱ؆୯ʹॻ͚Δ
w XBTNͩͱ্هͷQBDLBHFඇରԠ w σϞOIPPZSJPXFCTPDLFU ˑL Λ༻
σϞ w ൃදऀͱڠྗऀͷਓͰΩϟϥΫλʔͷҠಈϝοηʔδͷૹ৴Λͯ͠ΈΔ w ૢ࡞ͨ࣌͠ͷ$ISPNFσϕϩούʔπʔϧΛݟͯ8FC4PDLFU௨৴ΛΈͤΔ w ࠷ޙʹ63-Λڞ༗ɺདྷΕΔਓདྷͯΒ͏ αʔό͕ύϯΫ͢Δ͔
ॲཧͷྲྀΕ ೖࣨ ΫϥΠΞϯτ" ৽نೖࣨ 8FC4PDLFUαʔό ΫϥΠΞϯτ# ΫϥΠΞϯτ"ΑΓલʹೖࣨࡁΈ ೖࣨ ೖࣨड ৽Ϣʔβ
ࣗ ొ Ϣʔβొ ৽Ϣʔβొ ΫϥΠΞϯτʹೖࣨ ௨ طଘϢʔβ ϝοηʔ δཤྺऔಘ௨ طଘϢʔβ ϝοηʔ δཤྺొ อଘ ྖҬ ʹ͋ Δ ͷΛ ৗʹ ࠶ඳ ը อଘ ྖҬ ʹ͋ Δ ͷΛ ৗʹ ࠶ඳ ը %# %# ϒϥβͷ อଘྖҬ ϒϥβͷ อଘྖҬ Ϣʔβ*% ࠲ඪ Y Z ͖
ॲཧͷྲྀΕ ϝοηʔδૹ৴ ΫϥΠΞϯτ" ೖࣨࡁΈ 8FC4PDLFUαʔό ΫϥΠΞϯτ# ೖࣨࡁΈ ϝοηʔδΛૹ৴ ϝοηʔδड ϝοηʔδొ
ϝοηʔδ௨ ϝοηʔδ ࣗͷ ొ ϝοηʔδొ Ϣʔβ*% ϝοηʔδ %# ϒϥβͷ อଘྖҬ ϒϥβͷ อଘྖҬ อଘ ྖҬ ʹ͋ Δ ͷΛ ৗʹ ࠶ඳ ը อଘ ྖҬ ʹ͋ Δ ͷΛ ৗʹ ࠶ඳ ը ϝοηʔδͷ9࠲ඪൃݴΩϟϥΫλͷ9࠲ඪͱಉ͡ ϝοηʔδͷ:࠲ඪൃݴ࣌ࠁݱࡏ࣌ࠁΛͱʹܭࢉ ු͔ͼ্͕Δ෩
·ͱΊ w 8FC4PDLFUΛ͏͜ͱͰFCJUFOͰϚϧνϓϨΠήʔϜΛ࣮Ͱ͖Δ w ϚϧνϓϨΠήʔϜͱͦͷαʔόͷํΛ(PݴޠͰ؆୯ʹ࣮Ͱ͖Δ
c࣮ྫ FCJUFOΫϥΠΞϯτ w ը໘ͷૢ࡞͝ͱʹԿΛૹΔ͔ܾΊͯૹΔɺجຊతʹ(BNF6QEBUFͰ࣮ func (g *Game) Update() error {
// ΩϟϥΫλʔͷҠಈ if dir != entity.DirUnknown { x, y := g.characters[g.id].Point() g.wss.Send(entity.NewMessage("move", entity.NewMoveBody(g.id, x, y, dir))) } // ϝοηʔδͷૹ৴ if ebiten.IsKeyPressed(ebiten.KeyEnter) { text := g.textField.Text() g.textField.Clear() g.wss.Send(entity.NewMessage("say", entity.NewSayBody(g.id, text))) } return nil }
c࣮ྫ 8FC4PDLFUαʔό func readMessage(session *session, service socket.UseCase) { ɹ for
{ var mp presenter.MessagePresenter if err := session.Read(&mp); err != nil { return } switch mp.MessageType { // ΩϟϥΫλʔͷҠಈ ΩϟϥΫλʔͷ࠲ඪΛӬଓԽ case "move": u := entity.NewUser(mp.Body.ID, mp.Body.X, mp.Body.Y, entity.Dir(mp.Body. if err := service.UpdateUser(u); err != nil { return } body := entity.NewEnterBody(users) mp := presenter.NewMessagePresenter(entity.NewMessage("enter", body)) if err := session.Write(&mp); err != nil { return } continue } // ϝοηʔδͷૹ৴ ϝοηʔδͷ༰ΛӬଓԽ case "say": if err := service.AddMessage(mp.Unmarshal()); err != nil { return } // ΩϟϥΫλʔͷҠಈ or ϝοηʔδͷૹ৴ΛଞͷϢʔβʹൖ if err := service.Publish(mp.Unmarshal()); err != nil { return } } } w 8FCTPDLFUͷϦΫΤετ ͷ۠ΛಡΈऔΓɺ۠ ಛ༗ͷૢ࡞Λ࣮ࢪ w ͦͷޙɺଞϢʔβૢ࡞ ༰Λૹ৴