public GKTurnBasedMatch(Dictionary <string, object> dict) { if (dict.ContainsKey("matchId")) { matchId = dict["matchId"].ToString(); } if (dict.ContainsKey("status")) { status = (GKTurnBasedMatchStatus)int.Parse(dict["status"].ToString()); } if (dict.ContainsKey("message")) { message = dict["message"].ToString(); } // grab and convert the date if (dict.ContainsKey("creationDate")) { var timeSinceEpoch = double.Parse(dict["creationDate"].ToString()); var intermediate = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); creationDate = intermediate.AddSeconds(timeSinceEpoch); } // get the participants if (dict.ContainsKey("participants")) { var participantsList = dict["participants"] as List <object>; participants = new List <GKTurnBasedParticipant>(participantsList.Count); foreach (Dictionary <string, object> particpantDict in participantsList) { if (particpantDict != null) { participants.Add(new GKTurnBasedParticipant(particpantDict)); } else { participants.Add(new GKTurnBasedParticipant()); } } } // get the current participant if (dict.ContainsKey("currentParticipant")) { currentParticipant = new GKTurnBasedParticipant(dict["currentParticipant"] as Dictionary <string, object>); } }
/// <summary> /// Constructs a new instance from the <see cref="EasyMobile.iOS.GameKit.GKTurnBasedParticipant"/> object. /// </summary> /// <returns>The GK turn based participant.</returns> /// <param name="gkParticipant">Gk participant.</param> internal static Participant FromGKTurnBasedParticipant(GKTurnBasedParticipant gkParticipant) { if (gkParticipant == null) { return(null); } var gkPlayer = gkParticipant.Player; return(new Participant( gkPlayer != null ? gkPlayer.DisplayName : null, gkPlayer != null ? gkPlayer.PlayerID : null, gkParticipant.Status.ToParticipantStatus(), Player.FromGKPlayer(gkPlayer), gkParticipant.IsConnectedToRoom())); }
public static bool IsConnectedToRoom(this GKTurnBasedParticipant participant) { return(participant.Status == GKTurnBasedParticipant.GKTurnBasedParticipantStatus.Active); }
/// <summary> /// Update versus match status /// </summary> public static void UpdateMatchFromPuzzle(PuzzleData puzzle, Action <NSError> callback) { if (puzzle.Match == null) { Logger.E("This puzzle contains no match data... Can't do anything!"); return; } // Match data -> Puzzle + Image // -- Image as Base64 string UIImage image = UIImage.FromFile(puzzle.Filename); Byte[] byteArray = null; using (NSData nsImageData = image.AsPNG()) { byteArray = new Byte[nsImageData.Length]; System.Runtime.InteropServices.Marshal.Copy(nsImageData.Bytes, byteArray, 0, Convert.ToInt32(nsImageData.Length)); } string base64image = Convert.ToBase64String(byteArray); // -- Data TransferablePuzzleData tp = new TransferablePuzzleData(); tp.Puzzle = puzzle; tp.Base64Image = base64image; // Build an XML text string xml = string.Empty; XmlSerializer xmlSerializer = new XmlSerializer(tp.GetType()); using (StringWriter textWriter = new StringWriter()) { xmlSerializer.Serialize(textWriter, tp); xml = textWriter.ToString(); } xmlSerializer = null; // Xml to bytes NSData puzzleData = NSData.FromString(xml); // Next participant GKTurnBasedParticipant nextPlayer = null; foreach (var participant in puzzle.Match.Participants) { if (participant.PlayerID != GKLocalPlayer.LocalPlayer.PlayerID) { nextPlayer = participant; break; } } // Game center match progress // -- Already an opponent score? End if (puzzle.GetBestPlayerScore(nextPlayer.PlayerID).HasValue) { puzzle.Match.EndMatchInTurn( puzzleData, (err) => { if (callback != null) { callback(err); } } ); } else { // -- Send current score puzzle.Match.EndTurn( new GKTurnBasedParticipant[] { nextPlayer }, 120, puzzleData, callback ); } }