Skip to content

Instantly share code, notes, and snippets.

@vgheri
Created November 18, 2012 16:03
Show Gist options
  • Save vgheri/4105999 to your computer and use it in GitHub Desktop.
Save vgheri/4105999 to your computer and use it in GitHub Desktop.
Joined() method
/// <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);
}
}
@kamlekar
Copy link

kamlekar commented Dec 6, 2012

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 :)

@kamlekar
Copy link

kamlekar commented Dec 6, 2012

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