private void Serialize(Player Player, BinaryOutput Output) { Output.WriteString(Player.PublicEndpoint.Address.ToString()); Output.WriteUInt16((ushort)Player.PublicEndpoint.Port); Output.WriteString(Player.LocalEndpoint.Address.ToString()); Output.WriteUInt16((ushort)Player.LocalEndpoint.Port); Output.WriteGuid(Player.PlayerId); Output.WriteUInt((uint)Player.Count); foreach (KeyValuePair <string, string> P in Player) { Output.WriteString(P.Key); Output.WriteString(P.Value); } }
/// <summary> /// Creates inter-player peer-to-peer connections between known players. /// </summary> public void ConnectPlayers() { if (this.state != MultiPlayerState.FindingPlayers) { throw new Exception("The multiplayer environment is not in the state of finding players."); } this.State = MultiPlayerState.ConnectingPlayers; int Index = 0; BinaryOutput Output = new BinaryOutput(); Output.WriteByte(1); Output.WriteString(this.applicationName); this.localPlayer.Index = Index++; this.Serialize(this.localPlayer, Output); #if LineListener Console.Out.Write("Tx: INTERCONNECT(" + this.localPlayer.ToString()); #endif lock (this.remotePlayersByEndpoint) { Output.WriteUInt((uint)this.remotePlayersByEndpoint.Count); foreach (Player Player in this.remotePlayersByEndpoint.Values) { Player.Index = Index++; this.Serialize(Player, Output); #if LineListener Console.Out.Write("," + Player.ToString()); #endif } } this.mqttTerminatedPacketIdentifier = this.mqttConnection.PUBLISH(this.mqttNegotiationTopic, MqttQualityOfService.AtLeastOne, false, Output); this.mqttConnection.OnPublished += new PacketAcknowledgedEventHandler(mqttConnection_OnPublished); #if LineListener Console.Out.WriteLine(")"); #endif this.StartConnecting(); }
/// <summary> /// Creates inter-player peer-to-peer connections between known players. /// </summary> public void ConnectPlayers() { if (this.state != MultiPlayerState.FindingPlayers) throw new Exception("The multiplayer environment is not in the state of finding players."); this.State = MultiPlayerState.ConnectingPlayers; int Index = 0; BinaryOutput Output = new BinaryOutput(); Output.WriteByte(1); Output.WriteString(this.applicationName); this.localPlayer.Index = Index++; this.Serialize(this.localPlayer, Output); #if LineListener Console.Out.Write("Tx: INTERCONNECT(" + this.localPlayer.ToString()); #endif lock (this.remotePlayersByEndpoint) { Output.WriteUInt((uint)this.remotePlayersByEndpoint.Count); foreach (Player Player in this.remotePlayersByEndpoint.Values) { Player.Index = Index++; this.Serialize(Player, Output); #if LineListener Console.Out.Write("," + Player.ToString()); #endif } } this.mqttTerminatedPacketIdentifier = this.mqttConnection.PUBLISH(this.mqttNegotiationTopic, MqttQualityOfService.AtLeastOne, false, Output); this.mqttConnection.OnPublished += new PacketAcknowledgedEventHandler(mqttConnection_OnPublished); #if LineListener Console.Out.WriteLine(")"); #endif this.StartConnecting(); }
private void Serialize(Player Player, BinaryOutput Output) { Output.WriteString(Player.PublicEndpoint.Address.ToString()); Output.WriteUInt16((ushort)Player.PublicEndpoint.Port); Output.WriteString(Player.LocalEndpoint.Address.ToString()); Output.WriteUInt16((ushort)Player.LocalEndpoint.Port); Output.WriteGuid(Player.PlayerId); Output.WriteUInt((uint)Player.Count); foreach (KeyValuePair<string, string> P in Player) { Output.WriteString(P.Key); Output.WriteString(P.Value); } }