SlideShare a Scribd company logo
1 of 31
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]

More Related Content

Viewers also liked

Akamai Korea - Tech Day (2015/03/11) HTTP/2
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/2SangJin Kang
 
HTTP 발표자료 - 김연수
HTTP 발표자료 - 김연수HTTP 발표자료 - 김연수
HTTP 발표자료 - 김연수Yeon Soo Kim
 
Embedded linux 악성코드 동향 20150323 v1.0 공개판
Embedded linux 악성코드 동향 20150323 v1.0 공개판Embedded linux 악성코드 동향 20150323 v1.0 공개판
Embedded linux 악성코드 동향 20150323 v1.0 공개판Minseok(Jacky) Cha
 
Play framework: lessons learned
Play framework: lessons learnedPlay framework: lessons learned
Play framework: lessons learnedPeter Hilton
 
임베디드 리눅스 악성코드로 본 사물인터넷 보안 차민석 20150406_코드게이트 발표판
임베디드 리눅스 악성코드로 본 사물인터넷 보안 차민석 20150406_코드게이트 발표판임베디드 리눅스 악성코드로 본 사물인터넷 보안 차민석 20150406_코드게이트 발표판
임베디드 리눅스 악성코드로 본 사물인터넷 보안 차민석 20150406_코드게이트 발표판Minseok(Jacky) Cha
 
Victoria's Secret Angels Campaign
Victoria's Secret Angels CampaignVictoria's Secret Angels Campaign
Victoria's Secret Angels CampaignJohn White
 

Viewers also liked (6)

Akamai Korea - Tech Day (2015/03/11) HTTP/2
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
 
HTTP 발표자료 - 김연수
HTTP 발표자료 - 김연수HTTP 발표자료 - 김연수
HTTP 발표자료 - 김연수
 
Embedded linux 악성코드 동향 20150323 v1.0 공개판
Embedded linux 악성코드 동향 20150323 v1.0 공개판Embedded linux 악성코드 동향 20150323 v1.0 공개판
Embedded linux 악성코드 동향 20150323 v1.0 공개판
 
Play framework: lessons learned
Play framework: lessons learnedPlay framework: lessons learned
Play framework: lessons learned
 
임베디드 리눅스 악성코드로 본 사물인터넷 보안 차민석 20150406_코드게이트 발표판
임베디드 리눅스 악성코드로 본 사물인터넷 보안 차민석 20150406_코드게이트 발표판임베디드 리눅스 악성코드로 본 사물인터넷 보안 차민석 20150406_코드게이트 발표판
임베디드 리눅스 악성코드로 본 사물인터넷 보안 차민석 20150406_코드게이트 발표판
 
Victoria's Secret Angels Campaign
Victoria's Secret Angels CampaignVictoria's Secret Angels Campaign
Victoria's Secret Angels Campaign
 

Similar to XNA2.0 Network Programming

AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017Amazon Web Services Korea
 
2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread
2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread
2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBreadDae Kim
 
(Fios#03) 4. 파워셸 포렌식 조사 기법
(Fios#03) 4. 파워셸 포렌식 조사 기법(Fios#03) 4. 파워셸 포렌식 조사 기법
(Fios#03) 4. 파워셸 포렌식 조사 기법INSIGHT FORENSIC
 
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기flashscope
 
CSGG: Database Team Project
CSGG: Database Team ProjectCSGG: Database Team Project
CSGG: Database Team ProjectSeong Heum Park
 
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다Dae Kim
 
Flappy bird 만들기 세미나 자료(유니티 4.3버전)
Flappy bird 만들기 세미나 자료(유니티 4.3버전)Flappy bird 만들기 세미나 자료(유니티 4.3버전)
Flappy bird 만들기 세미나 자료(유니티 4.3버전)Changwon National University
 
Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신Circulus
 
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기Kiyoung Moon
 
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지강 민우
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기YEONG-CHEON YOU
 
Java term project final
Java term project finalJava term project final
Java term project finalKimSoohyun15
 
Casual Game for Windows Mobile
Casual Game for Windows MobileCasual Game for Windows Mobile
Casual Game for Windows MobileSeo Jinho
 
Scouter Tutorial & Sprint
Scouter Tutorial & SprintScouter Tutorial & Sprint
Scouter Tutorial & SprintGunHee Lee
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)beom kyun choi
 
브릿지 Unity3D 기초 스터디 1회
브릿지 Unity3D 기초 스터디 1회브릿지 Unity3D 기초 스터디 1회
브릿지 Unity3D 기초 스터디 1회BridgeGames
 
회사소개서 브로셔V1.0
회사소개서 브로셔V1.0회사소개서 브로셔V1.0
회사소개서 브로셔V1.0원택 황
 
Network programming report
Network programming reportNetwork programming report
Network programming reportJongwon
 
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 GamingAmazon Web Services Korea
 

Similar to XNA2.0 Network Programming (20)

Game Play System
Game Play SystemGame Play System
Game Play System
 
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
 
2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread
2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread
2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread
 
(Fios#03) 4. 파워셸 포렌식 조사 기법
(Fios#03) 4. 파워셸 포렌식 조사 기법(Fios#03) 4. 파워셸 포렌식 조사 기법
(Fios#03) 4. 파워셸 포렌식 조사 기법
 
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기
 
CSGG: Database Team Project
CSGG: Database Team ProjectCSGG: Database Team Project
CSGG: Database Team Project
 
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
 
Flappy bird 만들기 세미나 자료(유니티 4.3버전)
Flappy bird 만들기 세미나 자료(유니티 4.3버전)Flappy bird 만들기 세미나 자료(유니티 4.3버전)
Flappy bird 만들기 세미나 자료(유니티 4.3버전)
 
Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신
 
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
 
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
Java term project final
Java term project finalJava term project final
Java term project final
 
Casual Game for Windows Mobile
Casual Game for Windows MobileCasual Game for Windows Mobile
Casual Game for Windows Mobile
 
Scouter Tutorial & Sprint
Scouter Tutorial & SprintScouter Tutorial & Sprint
Scouter Tutorial & Sprint
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)
 
브릿지 Unity3D 기초 스터디 1회
브릿지 Unity3D 기초 스터디 1회브릿지 Unity3D 기초 스터디 1회
브릿지 Unity3D 기초 스터디 1회
 
회사소개서 브로셔V1.0
회사소개서 브로셔V1.0회사소개서 브로셔V1.0
회사소개서 브로셔V1.0
 
Network programming report
Network programming reportNetwork programming report
Network programming report
 
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
 

More from SangJin Kang

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

More from SangJin Kang (11)

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

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.