mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2025-12-25 01:12:53 +00:00
139 lines
3 KiB
Haxe
139 lines
3 KiB
Haxe
package net;
|
|
|
|
import haxe.io.Bytes;
|
|
import datachannel.RTCPeerConnection;
|
|
import datachannel.RTCDataChannel;
|
|
import net.MoveManager;
|
|
import src.TimeState;
|
|
|
|
enum abstract GameplayState(Int) from Int to Int {
|
|
var UNKNOWN;
|
|
var LOBBY;
|
|
var GAME;
|
|
}
|
|
|
|
enum abstract NetPlatform(Int) from Int to Int {
|
|
var Unknown;
|
|
var PC;
|
|
var MacOS;
|
|
var Web;
|
|
var Android;
|
|
}
|
|
|
|
@:publicFields
|
|
class ClientConnection extends GameConnection {
|
|
var socket:RTCPeerConnection;
|
|
var datachannel:RTCDataChannel;
|
|
var datachannelUnreliable:RTCDataChannel;
|
|
var rtt:Float;
|
|
var pingSendTime:Float;
|
|
var _rttRecords:Array<Float> = [];
|
|
var lastRecvTime:Float;
|
|
var didWarnTimeout:Bool = false;
|
|
var leftAlready = false;
|
|
|
|
public function new(id:Int, socket:RTCPeerConnection, datachannel:RTCDataChannel, datachannelUnreliable:RTCDataChannel) {
|
|
super(id);
|
|
this.socket = socket;
|
|
this.datachannel = datachannel;
|
|
this.datachannelUnreliable = datachannelUnreliable;
|
|
this.state = GameplayState.LOBBY;
|
|
this.rtt = 0;
|
|
this.name = "Unknown";
|
|
}
|
|
|
|
override function sendBytes(b:Bytes) {
|
|
datachannel.sendBytes(b);
|
|
}
|
|
|
|
override function sendBytesUnreliable(b:Bytes) {
|
|
datachannelUnreliable.sendBytes(b);
|
|
}
|
|
|
|
public inline function needsTimeoutWarn(t:Float) {
|
|
return (t - lastRecvTime) > 10 && !didWarnTimeout;
|
|
}
|
|
|
|
public inline function needsTimeoutKick(t:Float) {
|
|
return (t - lastRecvTime) > 15 && didWarnTimeout;
|
|
}
|
|
}
|
|
|
|
@:publicFields
|
|
class DummyConnection extends GameConnection {
|
|
public function new(id:Int) {
|
|
super(id);
|
|
this.state = GameplayState.GAME;
|
|
this.lobbyReady = true;
|
|
}
|
|
}
|
|
|
|
@:publicFields
|
|
abstract class GameConnection {
|
|
var id:Int;
|
|
var state:GameplayState;
|
|
var moveManager:MoveManager;
|
|
var name:String;
|
|
var lobbyReady:Bool;
|
|
var platform:NetPlatform;
|
|
var marbleId:Int;
|
|
var isPrivate:Bool;
|
|
|
|
function new(id:Int) {
|
|
this.id = id;
|
|
this.moveManager = new MoveManager(this);
|
|
this.lobbyReady = false;
|
|
}
|
|
|
|
public function ready() {
|
|
state = GameplayState.GAME;
|
|
}
|
|
|
|
public function toggleLobbyReady() {
|
|
lobbyReady = !lobbyReady;
|
|
}
|
|
|
|
public function queueMove(m:NetMove) {
|
|
moveManager.queueMove(m);
|
|
}
|
|
|
|
public inline function acknowledgeMove(m:NetMove, timeState:TimeState) {
|
|
return moveManager.acknowledgeMove(m, timeState);
|
|
}
|
|
|
|
public inline function getQueuedMoves() {
|
|
return @:privateAccess moveManager.queuedMoves;
|
|
}
|
|
|
|
public inline function getQueuedMovesLength() {
|
|
return moveManager.getQueueSize();
|
|
}
|
|
|
|
public function recordMove(marble:src.Marble, motionDir:h3d.Vector, timeState:TimeState, serverTicks:Int) {
|
|
return moveManager.recordMove(marble, motionDir, timeState, serverTicks);
|
|
}
|
|
|
|
public function getNextMove() {
|
|
return moveManager.getNextMove();
|
|
}
|
|
|
|
public function sendBytes(b:haxe.io.Bytes) {}
|
|
|
|
public function sendBytesUnreliable(b:haxe.io.Bytes) {}
|
|
|
|
public inline function getName() {
|
|
return name;
|
|
}
|
|
|
|
public inline function setName(value:String) {
|
|
name = value;
|
|
}
|
|
|
|
public inline function setMarbleId(value:Int) {
|
|
marbleId = value;
|
|
}
|
|
|
|
public inline function getMarbleId() {
|
|
return marbleId;
|
|
}
|
|
}
|