Created
November 18, 2012 16:03
-
-
Save vgheri/4105999 to your computer and use it in GitHub Desktop.
Joined() method
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// <summary> | |
/// Invoked when a new client joins the system | |
/// </summary> | |
public void Joined() | |
{ | |
// 1: Add user to list of connected users | |
// 2: If waiting list is empty add user to waiting list | |
// 3: Else find an opponent (first in the waiting list) and remove him from the waiting list | |
// 4: Create room and assign both users | |
// 5: Create a group for this room | |
// 6: Setup match (playRoom Id, initial ball direction, player on the left and right etc...) | |
// 7: Notify the group the match can start | |
// 8: Add the game to the list of games that the Engine must simulate | |
var user = new User() | |
{ | |
Id = Context.ConnectionId, | |
Username = Caller.username | |
}; | |
_userRepository.AddUser(user); | |
if (_userRepository.WaitingList.Count() == 0) | |
{ | |
_userRepository.AddToWaitingList(user); | |
Caller.wait(); | |
} | |
else | |
{ | |
var opponent = _userRepository.WaitingList.First(); | |
_userRepository.RemoveFromWaitingList(opponent); | |
var playRoom = new PlayRoom() | |
{ | |
Id = Guid.NewGuid().ToString(), | |
Player1 = opponent, | |
Player2 = user | |
}; | |
_roomRepository.Add(playRoom); | |
Task t1 = Groups.Add(opponent.Id, playRoom.Id); | |
Task t2 = Groups.Add(user.Id, playRoom.Id); | |
t1.Wait(); | |
t2.Wait(); | |
// Rough solution. We have to be sure the clients have received the group add messages over the wire | |
// TODO: ask maybe on Jabbr or on StackOverflow and think about a better solution | |
Thread.Sleep(3000); | |
Player player1 = Engine.CreatePlayer(playRoom.Player1, 1, true); | |
Player player2 = Engine.CreatePlayer(playRoom.Player2, 2, false); | |
Game game = Engine.CreateGame(playRoom.Id, player1, player2); | |
dynamic matchOptions = new ExpandoObject(); | |
matchOptions.PlayRoomId = playRoom.Id; | |
matchOptions.Player1 = playRoom.Player1; | |
matchOptions.Player2 = playRoom.Player2; | |
matchOptions.BallDirection = game.Ball.Direction; | |
Clients[playRoom.Id].setupMatch(matchOptions); | |
Thread.Sleep(3000); | |
Engine.AddGame(game); | |
} | |
} |
sorry wrong post.... I was going to add to my code instead.. extremely sorry..
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
If anyone want to discuss the above code, then they are welcome to http://chat.stackoverflow.com/rooms/16765/stick-organizer
If I am not there then please ping me :)