public void HandleJoinShipResponce(object sender, ShipMessage message) { JoinShipResponce responce = message as JoinShipResponce; if (responce.Error) { ConnectedShip = null; ShipJoinRejected?.Invoke(this, responce); return; } ConnectedShip = new ShipTemplate(); ConnectedShip.ID = responce.ShipID; ConnectedShip.Name = responce.ShipName; ConnectedShip.ClassName = responce.ShipClass; JoinedShip?.Invoke(this, responce); }
public void FromProtobuf(IMessage message) { ShipMessage msg = (ShipMessage)message; if (msg.Transform != null) { transform.FromTransformMessage(msg.Transform); } if (msg.OwnerGuid != null) { ownerGuid = msg.OwnerGuid; } if (msg.Model != null && msg.Model != model) { UpdateModel(msg.Model); } }
protected virtual void ProcessMessage(NetIncomingMessage message) { if (!ConnectedClients.ContainsKey(message.SenderConnection.Peer.UniqueIdentifier)) { return; } var peer = ConnectedClients[message.SenderConnection.Peer.UniqueIdentifier]; ShipMessage msg = Serialization.Unpack(message); if (msg != null) { if (Dispatcher.Dispatch(peer, msg)) { return; } lock (peer) peer.PendingInbound.Add(msg); } }
private void HandleShipRequest(object sender, ShipMessage msg) { ShipPeer peer = sender as ShipPeer; ShipRequest request = msg as ShipRequest; JoinShipResponce responce = new JoinShipResponce(); PlayerShip shipToLink = null; if (peer.LinkedShip != null) { shipToLink = peer.LinkedShip; } else { if (request.Join) { shipToLink = PlayerShips.Find((x) => x.LinkedShip.GUID == request.RequestedShipID); if (shipToLink == null || shipToLink.Locked && shipToLink.Password != request.Password) { responce.Error = true; responce.Message = "NoShipToJoin"; peer.Send(responce); return; // nope! } else { if (!shipToLink.ControlingPeers.Contains(peer)) { shipToLink.ControlingPeers.Add(peer); } peer.LinkedShip = shipToLink; } } } if (shipToLink == null) { var template = TemplateDatabase.GetTemplate(request.RequestedShipID); int shipID = ActiveScenario.SpawnPlayableShip(peer.Connection.RemoteUniqueIdentifier.ToString(), template == null ? string.Empty : template.Name, request.Name); var ship = ZoneManager.GetFirstMatch(new PlayableShipFinder(shipID)) as Ship; shipToLink = new PlayerShip(); shipToLink.LinkedShip = ship; shipToLink.ControlingPeers.Add(peer); shipToLink.Locked = request.Password != string.Empty; shipToLink.Password = request.Password; peer.LinkedShip = shipToLink; PlayerShips.Add(shipToLink); } // send back the responce with the ship they are on responce.Error = false; responce.Message = shipToLink.LinkedShip.Name; responce.ShipID = shipToLink.LinkedShip.GUID; peer.Send(responce); // send an info and status update }
public void HandleUpdateShipList(object sender, ShipMessage message) { LastShipList = message as UpdateShipList; ShipListUpdated?.Invoke(this, LastShipList); }