Impl. Heartbeat and DC check
This commit is contained in:
parent
6cfd91b659
commit
da4b5cda63
@ -5,7 +5,11 @@
|
||||
// Created by Tim Herbst on 13.05.20.
|
||||
// Copyright © 2020 SP2. All rights reserved.
|
||||
//
|
||||
import Foundation
|
||||
|
||||
struct Heartbeat: Codable {
|
||||
var date: Date
|
||||
}
|
||||
|
||||
struct NotificationModel: Codable {
|
||||
let name: String
|
||||
|
@ -28,7 +28,7 @@ struct State: Codable {
|
||||
let state: Int
|
||||
}
|
||||
|
||||
final class GameCenterManager: NSObject, GKMatchmakerViewControllerDelegate, GKGameCenterControllerDelegate ,GKMatchDelegate,GKLocalPlayerListener{
|
||||
final class GameCenterManager: NSObject, GKMatchmakerViewControllerDelegate, GKGameCenterControllerDelegate, GKMatchDelegate, GKLocalPlayerListener{
|
||||
|
||||
static var sharedInstance = GameCenterManager()
|
||||
|
||||
@ -219,9 +219,25 @@ final class GameCenterManager: NSObject, GKMatchmakerViewControllerDelegate, GKG
|
||||
os_log("New Scores reported to EloSystem", log: self.LOG, type: .info)
|
||||
})
|
||||
}
|
||||
if let heartbeat = try? jsonDecoder.decode(Heartbeat.self, from: data) {
|
||||
entityManager.getHUD()?.roundTimer.isHeartbeatLocked = false
|
||||
let df = DateFormatter()
|
||||
df.dateFormat = "yyyy-MM-dd HH:mm:ss"
|
||||
let dateString = df.string(from: heartbeat.date)
|
||||
print("Received last Heartbeat at \(dateString)")
|
||||
}
|
||||
|
||||
MultiplayerNetwork.sharedInstance.isSending = false
|
||||
}
|
||||
|
||||
func match(_ match: GKMatch, player: GKPlayer, didChange state: GKPlayerConnectionState) {
|
||||
if myMatch != match { return }
|
||||
if state == GKPlayerConnectionState.disconnected {
|
||||
self.opponentQuit = true;
|
||||
gameScene?.gameQuit()
|
||||
}
|
||||
}
|
||||
|
||||
func initAndSendMap() -> Void {
|
||||
self.gameScene = GameScene(size: self.menusc!.size)
|
||||
let mapModel = MapFactory(scene: self.gameScene!, entityManager: entityManager).load()
|
||||
@ -246,6 +262,7 @@ final class GameCenterManager: NSObject, GKMatchmakerViewControllerDelegate, GKG
|
||||
}
|
||||
return nilGK
|
||||
}
|
||||
|
||||
func sendStateToPeers(state: State){
|
||||
let encoder = JSONEncoder()
|
||||
let encoded = (try? encoder.encode(state))!
|
||||
@ -264,6 +281,7 @@ final class GameCenterManager: NSObject, GKMatchmakerViewControllerDelegate, GKG
|
||||
matchmakerVC!.matchmakerDelegate = self
|
||||
viewController?.present(matchmakerVC!, animated: true, completion: nil)
|
||||
}
|
||||
|
||||
func matchmakerViewControllerWasCancelled(_ viewController: GKMatchmakerViewController) {
|
||||
viewController.dismiss(animated: true, completion: nil)
|
||||
}
|
||||
|
@ -71,4 +71,10 @@ class MultiplayerNetwork{
|
||||
let encoded = (try? encoder.encode(NotificationModel(name: name)))!
|
||||
sendData(data: encoded)
|
||||
}
|
||||
|
||||
func sendHeartbeatToPlayer() {
|
||||
let encoder = JSONEncoder()
|
||||
let encoded = (try? encoder.encode(Heartbeat(date: Date())))!
|
||||
sendData(data: encoded)
|
||||
}
|
||||
}
|
||||
|
@ -12,6 +12,7 @@ class RoundTimer: Timer {
|
||||
|
||||
var timer: Timer?
|
||||
var timeLeft: Int = 0
|
||||
var isHeartbeatLocked = false
|
||||
var calculate = false
|
||||
var roundEnded = "Syncing"
|
||||
|
||||
@ -69,6 +70,9 @@ class RoundTimer: Timer {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!isHeartbeatLocked && (timeLeft % 7 == 0)){
|
||||
MultiplayerNetwork.sharedInstance.sendHeartbeatToPlayer()
|
||||
isHeartbeatLocked = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user