XNA2.0 Network Programming

Brandon Kang
Brandon KangService Platform Architect
Developing Cross-Platform Networked Game with XNA 2.0 Game Studio 2008. 5. 24. 김의열  (eykim@microsoft.com) Xbox & HW STE Microsoft Korea EDD R&D
Agenda ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
XNA & Cross-Platform Game Development (1) ,[object Object],LIVE Server PC Xbox360
XNA & Cross-Platform Game Development (2) ,[object Object],[object Object],[object Object],Framework Your Game
Preview: Net Rumble (DEMO) ,[object Object],[object Object],[object Object]
Preview: Net Rumble (FSM) GamerJoined GamerLeft GameStarted SessionEnded Create(…) StartGame() EndGame() Dispose() GameEnded HostChanged
Initiating Gamer Services ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Initiating Game Services: Code ,[object Object],[object Object],[object Object],using Microsoft.Xna.Framework.GamerServices …  public NetRumbleGame() { … Components.Add(new GamerServicesComponent(this)); … } if (!Guide.IsVisible) { Guide.ShowSignIn(1, false); } bool signedIntoLive = false; if (Gamer.SignedInGamers.Count > 0) { foreach (SignedInGamer signedInGamer in Gamer.SignedInGamers) { if (signedInGamer.IsSignedInToLive)  { signedIntoLive = true; break; } } State = signedIntoLive ? MainMenuState.SignedInLive : MainMenuState.SignedInLocal; } else { State = MainMenuState.SignedOut; }
Creating a Session ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Creating a Session – Network Requirements Xbox 360 Console Windows-Based Computer Run an XNA Framework Game LIVE Silver membership +  Creators Club membership No memberships Required Use System Link LIVE Silver membership +  Creators Club membership No memberships Required Sign-on to Xbox Live and  Games for Windows - LIVE Servers LIVE Silver membership +  Creators Club membership LIVE Silver membership +  Creators Club membership Use LIVE Matchmaking LIVE Gold membership +  Creators Club membership LIVE Gold membership +  Creators Club membership
Creating a Session: Code (1) ,[object Object],[object Object],[object Object],[object Object],[object Object],using Microsoft.Xna.Framework.Net; … enum SessionProperties { GameMode, ScoreToWin } enum GameMode { FreeForAll, CaptureTheFlag } … NetworkSessionProperties sessionProperties  = new NetworkSessionProperties(); sessionProperties[(int)SessionProperties.GameMode]  = (int)GameMode.FreeForAll; sessionProperties[(int)SessionProperties.ScoreToWin] = 1000; … NetworkSession session; int maxLocalGamers = 1; int maxGamers = 8; int privateGamerSlots =2; session = NetworkSession.Create(NetworkSessionType.SystemLink,  maxLocalGamers, maxGamers, privateGamerSlots, sessionProperties); NetworkSession networkSession = null; … IAsyncResult asyncResult = NetworkSession.BeginCreate(sessionType, 1, World.MaximumPlayers, null, null); … if ((asyncResult != null) && asyncResult.IsCompleted) { networkSession = NetworkSession.EndCreate(asyncResult); … networkSession.AllowHostMigration = true; networkSession.AllowJoinInProgress = false; … }
Creating a Session: Code (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],EventHandler<GameStartedEventArgs> gameStartedHandler; EventHandler<GamerJoinedEventArgs> gamerJoinedHandler; EventHandler<NetworkSessionEndedEventArgs> sessionEndedHandler; … public override void LoadContent() { … networkSession.GamerJoined += gamerJoinedHandler; networkSession.GameStarted += gameStartedHandler; networkSession.SessionEnded += sessionEndedHandler; … } … void networkSession_GamerJoined(object sender, GamerJoinedEventArgs e) { … } …
Finding and Joining a Session ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Finding and Joining a Session: Code (1) ,[object Object],[object Object],[object Object],using Microsoft.Xna.Framework.Net; … enum SearchProperties { GameMode, ScoreToWin } enum GameMode { FreeForAll, CaptureTheFlag } … NetworkSessionProperties searchProperties  = new NetworkSessionProperties(); searchProperties[(int)SearchProperties.GameMode]  = (int)GameMode.FreeForAll; searchProperties[(int)SearchProperties.ScoreToWin] = 1000; searchProperties[2] = 3; … AvailableNetworkSessionCollection availableSessions; int maxLocalGamers = 1; availableSessions = NetworkSession.Find(NetworkSessionType.PlayerMatch,  maxLocalGamers, searchProperties); if (availableSessions != null) { foreach (AvailableNetworkSession availableSession in availableSessions) { if (availableSession.CurrentGamerCount < World.MaximumPlayers) { MenuEntries.Add(availableSession.HostGamertag + &quot; (&quot; + availableSession.CurrentGamerCount.ToString() + &quot;/&quot; + World.MaximumPlayers.ToString() + &quot;)&quot;); } } }
Finding and Joining a Session: Code (2) ,[object Object],[object Object],[object Object],NetworkSession session; … session = NetworkSession.Join(availableSessions[selectedSessionIndex]); EventHandler<GameStartedEventArgs> gameStartedHandler; EventHandler<GamerJoinedEventArgs> gamerJoinedHandler; EventHandler<NetworkSessionEndedEventArgs> sessionEndedHandler; … public override void LoadContent() { … networkSession.GamerJoined += gamerJoinedHandler; networkSession.GameStarted += gameStartedHandler; networkSession.SessionEnded += sessionEndedHandler; … } … void networkSession_GamerJoined(object sender, GamerJoinedEventArgs e) { … } …
Managing Players Joining and Leaving ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Managing Players Joining and Leaving: Code ,[object Object],[object Object],[object Object],[object Object],void networkSession_GamerJoined(object sender, GamerJoinedEventArgs e) { for (int i = 0; i < networkSession.AllGamers.Count; i++) { if (networkSession.AllGamers[i] == e.Gamer) { PlayerData playerData = new PlayerData(); e.Gamer.Tag = playerData; … } } // Code for broadcasting the new player information … } void networkSession_GamerLeft(object sender, GamerLeftEventArgs e) { PlayerData playerData = e.Gamer.Tag as PlayerData; if ((playerData != null) && (playerData.Ship != null)) { playerData.Ship.Die(null, true); // Remove the player } }
Managing Players from Lobby to Gameplay ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Managing Players from Lobby to Gameplay: Code ,[object Object],[object Object],[object Object],[object Object],if (!networkSession.LocalGamers[0].IsReady) { MenuEntries[0] = &quot;Press X to Mark as Ready&quot;; } else if (!networkSession.IsEveryoneReady) { MenuEntries[0] = &quot;Waiting for all players to mark as ready...&quot;; } else if (!networkSession.IsHost) { MenuEntries[0] = &quot;Waiting for the host to start game...&quot;; } else { MenuEntries[0] = &quot;Starting the game...&quot;; networkSession.StartGame(); } void networkSession_GameStarted(object sender, GameStartedEventArgs e) { if ((networkSession != null) && networkSession.IsHost && (world != null)) { world.GenerateWorld(); } }
Sending & Receiving Data: Network Topology ,[object Object],[object Object],[object Object],[object Object],[object Object]
Sending & Receiving Data ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Sending & Receiving Data: Code (1) ,[object Object],[object Object],[object Object],[object Object],[object Object],PacketWriter packetWriter = new PacketWriter(); … PlayerData playerData = networkSession.LocalGamers[0].Tag as PlayerData; if ((playerData != null) && (playerData.Ship != null)) { packetWriter.Write((int)World.PacketTypes.ShipData); packetWriter.Write(playerData.Ship.Position); packetWriter.Write(playerData.Ship.Velocity); packetWriter.Write(playerData.Ship.Rotation); packetWriter.Write(playerData.Ship.Life); packetWriter.Write(playerData.Ship.Shield); packetWriter.Write(playerData.Ship.Score); networkSession.LocalGamers[0].SendData(packetWriter, SendDataOptions.InOrder); } void networkSession_GamerJoined(object sender, GamerJoinedEventArgs e) { … if ((networkSession.LocalGamers.Count > 0) && !e.Gamer.IsLocal) { PlayerData playerData=networkSession.LocalGamers[0].Tag as PlayerData; if (playerData != null) { packetWriter.Write((int)World.PacketTypes.PlayerData); … networkSession.LocalGamers[0].SendData(packetWriter, SendDataOptions.ReliableInOrder, e.Gamer); } } }
Sending & Receiving Data: Code (2) ,[object Object],[object Object],[object Object],[object Object],PacketReader packetReader = new PacketReader(); … while (networkSession.LocalGamers[0].IsDataAvailable) { NetworkGamer sender; networkSession.LocalGamers[0].ReceiveData(packetReader, out sender); PacketTypes packetType = (PacketTypes)packetReader.ReadInt32(); switch (packetType) { … case PacketTypes.ShipData: if ((sender != null) && !sender.IsLocal) { UpdateShipData(sender); } break; case PacketTypes.WorldData: if (!networkSession.IsHost && Initialized) { UpdateWorldData(); } break; … } }
Latency & Packet Loss Simulation ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Ending the Game ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Ending the Game: Code ,[object Object],[object Object],[object Object],[object Object],void networkSession_GameEnded(object sender, GameEndedEventArgs e) { if ((world != null) && !world.GameWon && !world.GameExited) { world.GameExited = true; } if (!IsExiting && ((world == null) || world.GameExited)) {  …  } } … if (world.GameExited) { … if (world != null) { world.Dispose(); world = null; } if (networkSession != null) { networkSession.Dispose(); networkSession = null; } … } switch (packetType) { … case PacketTypes.GameWon: … if (networkSession.IsHost && (networkSession.SessionState == NetworkSessionState.Playing)) {  networkSession.EndGame();  } break; }
DEMO ,[object Object],[object Object],[object Object]
TIP 1: Control & Balance ,[object Object],[object Object],GamePadState gamePad; KeyboardState keyboard; … protected override void Update(GameTime gameTime) { gamePad = GamePad.GetState(PlayerIndex.One); keyboard = Keyboard.GetState(); gamePadUp = gamePad.DPad.Up == ButtonState.Pressed || gamePad.ThumbSticks.Left.Y > 0.5f; gamePadDown = gamePad.DPad.Down == ButtonState.Pressed || gamePad.ThumbSticks.Left.Y < -0.5f; float moveFactorPerSecond = 0.5f * (float)gameTime.ElapsedRealTime.TotalMilliseconds/1000.0f; if (gamePadUp || keyboard.IsKeyDown(Keys.Up)) rightPaddlePosition -= moveFactorPerSecond; if (gamePadDown || keyboard.IsKeyDown(Keys.Down)) rightPaddlePosition += moveFactorPerSecond; … } ?
TIP 2: SafeArea ,[object Object],[object Object],[object Object],[object Object],[object Object],SafeArea
TIP 3: No Foreign References ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Q & A ,[object Object],[object Object],[object Object]
1 of 31

Recommended

XNA Introduction by
XNA IntroductionXNA Introduction
XNA IntroductionBrandon Kang
1K views20 slides
Java term project (final) by
Java term project (final)Java term project (final)
Java term project (final)KimSoohyun15
132 views28 slides
모바일 게임 하이브 런칭기 - 최용호 by
모바일 게임 하이브 런칭기 - 최용호모바일 게임 하이브 런칭기 - 최용호
모바일 게임 하이브 런칭기 - 최용호용호 최
729 views101 slides
[AWSKRUG] 모바일게임 하이브 런칭기 (2018) by
[AWSKRUG] 모바일게임 하이브 런칭기 (2018)[AWSKRUG] 모바일게임 하이브 런칭기 (2018)
[AWSKRUG] 모바일게임 하이브 런칭기 (2018)용호 최
45 views101 slides
Ndc2013 정리(upload버전) by
Ndc2013 정리(upload버전)Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)Minsu Park
4.3K views86 slides
증강현실을 통한 두더지잡기 게임 by
증강현실을 통한 두더지잡기 게임증강현실을 통한 두더지잡기 게임
증강현실을 통한 두더지잡기 게임Junhee Han
755 views11 slides

More Related Content

Viewers also liked

Akamai Korea - Tech Day (2015/03/11) HTTP/2 by
Akamai Korea - Tech Day (2015/03/11) HTTP/2Akamai Korea - Tech Day (2015/03/11) HTTP/2
Akamai Korea - Tech Day (2015/03/11) HTTP/2Brandon Kang
6.1K views47 slides
HTTP 발표자료 - 김연수 by
HTTP 발표자료 - 김연수HTTP 발표자료 - 김연수
HTTP 발표자료 - 김연수Yeon Soo Kim
5.4K views24 slides
Embedded linux 악성코드 동향 20150323 v1.0 공개판 by
Embedded linux 악성코드 동향 20150323 v1.0 공개판Embedded linux 악성코드 동향 20150323 v1.0 공개판
Embedded linux 악성코드 동향 20150323 v1.0 공개판Minseok(Jacky) Cha
4.1K views79 slides
Play framework: lessons learned by
Play framework: lessons learnedPlay framework: lessons learned
Play framework: lessons learnedPeter Hilton
6.6K views68 slides
임베디드 리눅스 악성코드로 본 사물인터넷 보안 차민석 20150406_코드게이트 발표판 by
임베디드 리눅스 악성코드로 본 사물인터넷 보안 차민석 20150406_코드게이트 발표판임베디드 리눅스 악성코드로 본 사물인터넷 보안 차민석 20150406_코드게이트 발표판
임베디드 리눅스 악성코드로 본 사물인터넷 보안 차민석 20150406_코드게이트 발표판Minseok(Jacky) Cha
2.7K views77 slides
Victoria's Secret Angels Campaign by
Victoria's Secret Angels CampaignVictoria's Secret Angels Campaign
Victoria's Secret Angels CampaignJohn White
1.8M views14 slides

Viewers also liked(6)

Akamai Korea - Tech Day (2015/03/11) HTTP/2 by Brandon Kang
Akamai Korea - Tech Day (2015/03/11) HTTP/2Akamai Korea - Tech Day (2015/03/11) HTTP/2
Akamai Korea - Tech Day (2015/03/11) HTTP/2
Brandon Kang6.1K views
HTTP 발표자료 - 김연수 by Yeon Soo Kim
HTTP 발표자료 - 김연수HTTP 발표자료 - 김연수
HTTP 발표자료 - 김연수
Yeon Soo Kim5.4K views
Embedded linux 악성코드 동향 20150323 v1.0 공개판 by Minseok(Jacky) Cha
Embedded linux 악성코드 동향 20150323 v1.0 공개판Embedded linux 악성코드 동향 20150323 v1.0 공개판
Embedded linux 악성코드 동향 20150323 v1.0 공개판
Minseok(Jacky) Cha4.1K views
Play framework: lessons learned by Peter Hilton
Play framework: lessons learnedPlay framework: lessons learned
Play framework: lessons learned
Peter Hilton6.6K views
임베디드 리눅스 악성코드로 본 사물인터넷 보안 차민석 20150406_코드게이트 발표판 by Minseok(Jacky) Cha
임베디드 리눅스 악성코드로 본 사물인터넷 보안 차민석 20150406_코드게이트 발표판임베디드 리눅스 악성코드로 본 사물인터넷 보안 차민석 20150406_코드게이트 발표판
임베디드 리눅스 악성코드로 본 사물인터넷 보안 차민석 20150406_코드게이트 발표판
Minseok(Jacky) Cha2.7K views
Victoria's Secret Angels Campaign by John White
Victoria's Secret Angels CampaignVictoria's Secret Angels Campaign
Victoria's Secret Angels Campaign
John White1.8M views

Similar to XNA2.0 Network Programming

Game Play System by
Game Play SystemGame Play System
Game Play Systemchangehee lee
825 views29 slides
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017 by
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017Amazon Web Services Korea
5.8K views36 slides
2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread by
2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread
2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBreadDae Kim
742 views150 slides
(Fios#03) 4. 파워셸 포렌식 조사 기법 by
(Fios#03) 4. 파워셸 포렌식 조사 기법(Fios#03) 4. 파워셸 포렌식 조사 기법
(Fios#03) 4. 파워셸 포렌식 조사 기법INSIGHT FORENSIC
5.3K views67 slides
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기 by
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기flashscope
3.4K views68 slides
CSGG: Database Team Project by
CSGG: Database Team ProjectCSGG: Database Team Project
CSGG: Database Team ProjectSeong Heum Park
352 views29 slides

Similar to XNA2.0 Network Programming(20)

AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017 by Amazon Web Services Korea
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread by Dae Kim
2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread
2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread
Dae Kim742 views
(Fios#03) 4. 파워셸 포렌식 조사 기법 by INSIGHT FORENSIC
(Fios#03) 4. 파워셸 포렌식 조사 기법(Fios#03) 4. 파워셸 포렌식 조사 기법
(Fios#03) 4. 파워셸 포렌식 조사 기법
INSIGHT FORENSIC5.3K views
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기 by flashscope
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기
flashscope3.4K views
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다 by Dae Kim
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
Dae Kim23.5K views
Startup JavaScript 9 - Socket.IO 실시간 통신 by Circulus
Startup JavaScript 9 - Socket.IO 실시간 통신Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신
Circulus2.8K views
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기 by Kiyoung Moon
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
Kiyoung Moon13.4K views
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지 by 강 민우
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
강 민우11.8K views
나만의 엔진 개발하기 by YEONG-CHEON YOU
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
YEONG-CHEON YOU1.3K views
Java term project final by KimSoohyun15
Java term project finalJava term project final
Java term project final
KimSoohyun15405 views
Casual Game for Windows Mobile by Seo Jinho
Casual Game for Windows MobileCasual Game for Windows Mobile
Casual Game for Windows Mobile
Seo Jinho8.6K views
Scouter Tutorial & Sprint by GunHee Lee
Scouter Tutorial & SprintScouter Tutorial & Sprint
Scouter Tutorial & Sprint
GunHee Lee1.4K views
Ji 개발 리뷰 (신림프로그래머) by beom kyun choi
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)
beom kyun choi5.7K views
브릿지 Unity3D 기초 스터디 1회 by BridgeGames
브릿지 Unity3D 기초 스터디 1회브릿지 Unity3D 기초 스터디 1회
브릿지 Unity3D 기초 스터디 1회
BridgeGames2K views
회사소개서 브로셔V1.0 by 원택 황
회사소개서 브로셔V1.0회사소개서 브로셔V1.0
회사소개서 브로셔V1.0
원택 황1.2K views
Network programming report by Jongwon
Network programming reportNetwork programming report
Network programming report
Jongwon821 views
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming by Amazon Web Services Korea
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming

More from Brandon Kang

웹에 빠른 날개를 달아주는 웹 성능 향상 이야기 by
웹에 빠른 날개를 달아주는 웹 성능 향상 이야기웹에 빠른 날개를 달아주는 웹 성능 향상 이야기
웹에 빠른 날개를 달아주는 웹 성능 향상 이야기Brandon Kang
23 views43 slides
Web Performance Optimization with HTTP/3 by
Web Performance Optimization with HTTP/3Web Performance Optimization with HTTP/3
Web Performance Optimization with HTTP/3Brandon Kang
184 views37 slides
How to Replicate PostgreSQL Database by
How to Replicate PostgreSQL DatabaseHow to Replicate PostgreSQL Database
How to Replicate PostgreSQL DatabaseBrandon Kang
181 views13 slides
Scalability strategies for cloud based system architecture by
Scalability strategies for cloud based system architectureScalability strategies for cloud based system architecture
Scalability strategies for cloud based system architectureBrandon Kang
281 views39 slides
HTTP/3 시대의 웹 성능 최적화 기술 이해하기 by
HTTP/3 시대의 웹 성능 최적화 기술 이해하기HTTP/3 시대의 웹 성능 최적화 기술 이해하기
HTTP/3 시대의 웹 성능 최적화 기술 이해하기Brandon Kang
6.1K views39 slides
수요자 중심의 클라우드 운영 및 전략 (CIO Summit 2019) by
수요자 중심의 클라우드 운영 및 전략 (CIO Summit 2019)수요자 중심의 클라우드 운영 및 전략 (CIO Summit 2019)
수요자 중심의 클라우드 운영 및 전략 (CIO Summit 2019)Brandon Kang
254 views37 slides

More from Brandon Kang(11)

웹에 빠른 날개를 달아주는 웹 성능 향상 이야기 by Brandon Kang
웹에 빠른 날개를 달아주는 웹 성능 향상 이야기웹에 빠른 날개를 달아주는 웹 성능 향상 이야기
웹에 빠른 날개를 달아주는 웹 성능 향상 이야기
Brandon Kang23 views
Web Performance Optimization with HTTP/3 by Brandon Kang
Web Performance Optimization with HTTP/3Web Performance Optimization with HTTP/3
Web Performance Optimization with HTTP/3
Brandon Kang184 views
How to Replicate PostgreSQL Database by Brandon Kang
How to Replicate PostgreSQL DatabaseHow to Replicate PostgreSQL Database
How to Replicate PostgreSQL Database
Brandon Kang181 views
Scalability strategies for cloud based system architecture by Brandon Kang
Scalability strategies for cloud based system architectureScalability strategies for cloud based system architecture
Scalability strategies for cloud based system architecture
Brandon Kang281 views
HTTP/3 시대의 웹 성능 최적화 기술 이해하기 by Brandon Kang
HTTP/3 시대의 웹 성능 최적화 기술 이해하기HTTP/3 시대의 웹 성능 최적화 기술 이해하기
HTTP/3 시대의 웹 성능 최적화 기술 이해하기
Brandon Kang6.1K views
수요자 중심의 클라우드 운영 및 전략 (CIO Summit 2019) by Brandon Kang
수요자 중심의 클라우드 운영 및 전략 (CIO Summit 2019)수요자 중심의 클라우드 운영 및 전략 (CIO Summit 2019)
수요자 중심의 클라우드 운영 및 전략 (CIO Summit 2019)
Brandon Kang254 views
How to develop and localize Xbox 360 titles by Brandon Kang
How to develop and localize Xbox 360 titlesHow to develop and localize Xbox 360 titles
How to develop and localize Xbox 360 titles
Brandon Kang281 views
HTTP 프로토콜의 이해와 활용 by Brandon Kang
HTTP 프로토콜의 이해와 활용HTTP 프로토콜의 이해와 활용
HTTP 프로토콜의 이해와 활용
Brandon Kang180 views
HTTP/2와 웹 성능 최적화 방안 by Brandon Kang
HTTP/2와 웹 성능 최적화 방안HTTP/2와 웹 성능 최적화 방안
HTTP/2와 웹 성능 최적화 방안
Brandon Kang3.9K views
HTML5 for web app. development by Brandon Kang
HTML5 for web app. developmentHTML5 for web app. development
HTML5 for web app. development
Brandon Kang1.3K views
Agile - SCRUM을 통한 개발관리 by Brandon Kang
Agile - SCRUM을 통한 개발관리Agile - SCRUM을 통한 개발관리
Agile - SCRUM을 통한 개발관리
Brandon Kang13.4K views

XNA2.0 Network Programming

  • 1. Developing Cross-Platform Networked Game with XNA 2.0 Game Studio 2008. 5. 24. 김의열 (eykim@microsoft.com) Xbox & HW STE Microsoft Korea EDD R&D
  • 2.
  • 3.
  • 4.
  • 5.
  • 6. Preview: Net Rumble (FSM) GamerJoined GamerLeft GameStarted SessionEnded Create(…) StartGame() EndGame() Dispose() GameEnded HostChanged
  • 7.
  • 8.
  • 9.
  • 10. Creating a Session – Network Requirements Xbox 360 Console Windows-Based Computer Run an XNA Framework Game LIVE Silver membership + Creators Club membership No memberships Required Use System Link LIVE Silver membership + Creators Club membership No memberships Required Sign-on to Xbox Live and Games for Windows - LIVE Servers LIVE Silver membership + Creators Club membership LIVE Silver membership + Creators Club membership Use LIVE Matchmaking LIVE Gold membership + Creators Club membership LIVE Gold membership + Creators Club membership
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.