Description

Some boilerplate code for the Pong Game competence event.

Prerequisites

  • Download and install node.js from http://www.nodejs.org
  • Run the following commands in the terminal:
    • git clone https://github.com/jayway/KHelgGameServer.git
    • npm install

Installation of node.js via homebrew doesn't work since it doesn't come with npm for some reason

Further details and specification about the server is available at: https://github.com/jayway/KHelgGameServer.

Project information

Use the .xcworkspace file. There are two scenes in the storyboard and three classes provided. You are free to change, remove and do what you want with everything.

  • ConnectionViewController.swift is the initial view controller. Contains basic UI for connecting and communicating with other players.
  • GameViewController.swift is where the game will be displayed.
  • SocketController.swift is responsible for the connection to the server via SocketIO.

In ConnectionViewController.swift there is a constant NSURL with the address to the server:

let url = NSURL(scheme: "ws", host: "localhost:3000", path: "/")!

You can change this to point to https://jaywaypongserver.herokuapp.com/ where there is a published version of the server.

SIOSocket

The project uses SIOSocket for communication with the server.

To connect:

SIOSocket.socketWithHost(urlString) { (socket) -> Void in
    self.socket = socket
}

Properties:

socket.onConnect = {
	println("Connected")
}

socket.onDisconnect = {
	println("Disconnected")
}

Listening for events:

socket.on("event to listen to") { (object: [AnyObject]!) in
	println("\(object.description)")
}

Note: put the properties and listening for events inside the connection closure.

Sending events:

self.socket?.emit("message type", args: [AnyObject]!)

SIOSocket will handle serialization and deserialization to and from JSON for you.

WARNING: All SIOSocket callbacks happen on a background thread. If you are going to update UI from a callback, make sure to dispatch the call back to the main thread first!