private void OnShipAdded(Packet<IScenePeer> obj) { //Console.WriteLine("ship.add received"); if (_simulation != null && _isReady) { var shipsToAdd = obj.ReadObject<ShipCreatedDto[]>(); //while (obj.Stream.Position != obj.Stream.Length) for (var i = 0; i < shipsToAdd.Length; i++) { var shipInfos = shipsToAdd[i]; if (shipInfos.id != this.id && !_simulation.Environment.VisibleShips.ContainsKey(shipInfos.id)) { var ship = new Ship { Id = shipInfos.id, Team = shipInfos.team, X = shipInfos.x, Status = shipInfos.status, Y = shipInfos.y, Rot = shipInfos.rot, Weapons = shipInfos.weapons }; //Console.WriteLine("[" + _name + "] Ship {0} added ", shipInfos.id); lock (_simulation.Environment) { _simulation.Environment.AddShip(ship); } } } } }
private void OnShipRemoved(Packet<IScenePeer> obj) { if (_simulation != null) { var id = obj.ReadObject<ushort>(); //Console.WriteLine("[" + _name + "] Ship {0} removed ", id); lock (_simulation.Environment) { _simulation.Environment.RemoveShip(id); } } }
private void OnShipStatusChanged(Packet<IScenePeer> obj) { if (!_isReady) { return; } var statusChangedArgs = obj.ReadObject<StatusChangedMsg>(); if (statusChangedArgs.shipId != this.id) { if (_simulation.Environment.VisibleShips.ContainsKey(statusChangedArgs.shipId)) { _simulation.Environment.VisibleShips[statusChangedArgs.shipId].Status = (ShipStatus)statusChangedArgs.status; } } else { if (_simulation.Boid.Status != ShipStatus.InGame && statusChangedArgs.status == ShipStatus.InGame) { _simulation.Reset(); } _simulation.Boid.Status = statusChangedArgs.status; } }
private void OnGetMyShipInfos(Packet<IScenePeer> obj) { var dtos = obj.ReadObject<ShipCreatedDto[]>(); if (dtos.Length != 1) { throw new InvalidDataException("Invalid number of dtos"); } var dto = dtos[0]; Console.WriteLine("[" + _name + "] Ship infos received : {0}", dto.id); id = dto.id; _simulation.Boid.Id = id; _simulation.Boid.X = dto.x; _simulation.Boid.Y = dto.y; _simulation.Boid.Rot = dto.rot;//= new Simulation(dto.x, dto.y, dto.rot); _simulation.Boid.Weapons = dto.weapons.Select(w => new WeaponViewModel { Weapon = w }).ToList(); _isReady = true; }
private void OnPositionUpdate(Packet<IScenePeer> obj) { if (!_isReady) { return; } if (_simulation != null) { using (var reader = new BinaryReader(obj.Stream)) { while (reader.BaseStream.Length - reader.BaseStream.Position >= POSITION_UPDATE_FRAME_LENGTH) { var id = reader.ReadUInt16(); var x = reader.ReadSingle(); var y = reader.ReadSingle(); var rot = reader.ReadSingle(); var time = reader.ReadInt64(); if (id != this.id) { _simulation.Environment.UpdateShipLocation(id, x, y, rot); } else if (_simulation.Boid.Status != ShipStatus.InGame) { } } } } }
private void OnShipUsedSkill(Packet<IScenePeer> obj) { //We don't care }
private void OnForcePositionUpdate(Packet<IScenePeer> obj) { using (var reader = new BinaryReader(obj.Stream)) { var id = reader.ReadUInt16(); var x = reader.ReadSingle(); var y = reader.ReadSingle(); var rot = reader.ReadSingle(); var time = reader.ReadInt64(); if (id == this.id) { _simulation.Boid.X = x; _simulation.Boid.Y = y; _simulation.Boid.Rot = rot; } } }
private void OnGameStatusChanged(Packet<IScenePeer> obj) { using (var reader = new BinaryReader(obj.Stream)) { var status = (GameStatus)reader.ReadByte(); if(status == GameStatus.Complete) { _gameCompleteTcs.SetResult(true); } } }
private void waitForData(Socket socket) { Packet packet = new Packet(); packet.socket = socket; packet.socket.BeginReceive(packet.buffer, 0, packet.buffer.Length, SocketFlags.None, new AsyncCallback(dataReceived), packet); }
private void OnPositionUpdate(Packet<IScenePeerClient> packet) { unchecked { using (var reader = new BinaryReader(packet.Stream)) { var shipId = reader.ReadUInt16(); var x = reader.ReadSingle(); var y = reader.ReadSingle(); var rot = reader.ReadSingle(); //var timestamp = reader.ReadInt64(); var timestamp = _scene.GetComponent<IEnvironment>().Clock; var ls = _scene.GetComponent<Server.Leaderboards.ILeaderboardsService>(); Ship ship; if (_ships.TryGetValue(shipId, out ship)) { ship.PositionUpdatedOn = timestamp; ship.x = x; ship.y = y; ship.rot = rot; } //this._boidsLastIndex.AddOrUpdate(shipId, packetIndex, (_, previousIndex) => //{ // if (previousIndex < (packetIndex - 1)) // { // Interlocked.Add(ref this._lostPackets, (int)(packetIndex - previousIndex - 1)); // } // return packetIndex; //}); } //packet.Connection.Send("position.update", s => //_scene.Broadcast("position.update", s => //{ // using (var binWriter = new BinaryWriter(s, Encoding.UTF8, true)) // { // binWriter.Write((byte)0xc0); // binWriter.Write((uint)time); // s.Write(bytes, 0, bytes.Length); // } //}, PacketPriority.MEDIUM_PRIORITY, PacketReliability.UNRELIABLE_SEQUENCED); } }
protected override byte[] BuildPacket(Packet packet) { return packet.Build(); }