void SendRegisterData(Player player) { Log("SendRegisterData on " + player.IPInfo); var writer = m_Server.m_Writer; var players = m_Server.m_Players; writer.Reset(); ReaderGameHelper.AddCommand(writer, ServerCommands.Register); var playerID = player.ID; //players.AddPlayer(player); writer.Put(playerID); writer.Put(player.PlayerName); writer.Put(players.Count - 1); for (int i = players.Count - 1; i >= 0; i--) { var otherPlayer = players[i]; if (!otherPlayer.IsConnected) { continue; } var id = otherPlayer.ID; if (id == playerID) { continue; } writer.Put(id); //writer.Put(otherPlayer.PlayerName); } player.Peer.Send(writer, DeliveryMethod.ReliableUnordered); }
public void OnNetworkReceive(NetPeer peer, NetPacketReader reader, DeliveryMethod deliveryMethod) { try { //if (m_IsLog) Log(string.Format("ReceiveData ID={0} DataLen={1}", peer.EndPoint, reader.AvailableBytes)); //if (m_IsLog) Log("OnNetworkReceive " + peer.EndPoint + " method=" + deliveryMethod); var command = ReaderGameHelper.GetCommand(reader); switch (command) { case ServerCommands.UpdateWorld: UpdateWorld(peer, reader); break; case ServerCommands.Verify: m_ProcessConnect.Verification(reader); break; case ServerCommands.Register: m_ProcessConnect.Register(reader); break; } } catch (Exception e) { if (m_IsLog) { Log("OnNetworkReceive bad data from " + (peer == null ? "Empty" : peer.EndPoint.ToString()) + " error=" + e, true); } return; } }
void SendRegisterAccept(Player player) { Log("SendRegisterAccept on " + player.IPInfo); var writer = m_Client.m_Writer; writer.Reset(); ReaderGameHelper.AddClientState(writer, player.State); player.Peer.Send(writer, DeliveryMethod.ReliableUnordered); }
void SendVerificationData(Player player) { Log("SendVerificationData on " + player.IPInfo); var writer = m_Server.m_Writer; writer.Reset(); ReaderGameHelper.AddCommand(writer, ServerCommands.Verify); //writer.Put(player.ID); player.Peer.Send(writer, DeliveryMethod.ReliableUnordered); }
void SendVerifyData(Player player) { Log("SendVerifyData on " + player.IPInfo); var writer = m_Client.m_Writer; writer.Reset(); ReaderGameHelper.AddClientState(writer, player.State); writer.Put(player.PlayerName); writer.Put((byte)player.TypeUnit); player.Peer.Send(writer, DeliveryMethod.ReliableUnordered); }
protected void PrepareSend(NetDataWriter writer) { ReaderGameHelper.AddWorldUpdate(writer, TypeWorldUpdate.Player); ReaderGameHelper.AddClientState(writer, State); writer.Put(ID); writer.Put(PlayerName); writer.Put((byte)TypeUnit); int index = m_DataSend.Last + 1; writer.Put(index); m_DataSend.Add(index); }
void UpdateWorld(NetPeer peer, NetPacketReader reader) { var type = ReaderGameHelper.GetWorldUpdate(reader); switch (type) { case TypeWorldUpdate.SyncPlayersInfo: SyncPlayersInfo(reader); break; case TypeWorldUpdate.Player: UpdatePlayer(reader); break; case TypeWorldUpdate.Hits: SetHitsData(reader); break; } }
bool GetHitsData() { if (!NetworkHitsController.Can) { return(false); } m_Writer.Reset(); ReaderGameHelper.AddCommand(m_Writer, ServerCommands.UpdateWorld); ReaderGameHelper.AddWorldUpdate(m_Writer, TypeWorldUpdate.Hits); bool res = NetworkHitsController.I.GetData(m_Writer); return(res); }
void SendSyncPlayers() { //Log("SendSyncPlayers"); m_Writer.Reset(); ReaderGameHelper.AddCommand(m_Writer, ServerCommands.UpdateWorld); ReaderGameHelper.AddWorldUpdate(m_Writer, TypeWorldUpdate.SyncPlayersInfo); int count = m_Players.Count; m_Writer.Put(count); for (int i = 0; i < count; i++) { //Log("Sync " + m_Players[i]); m_Writer.Put(m_Players[i].ID); } SendToAllWithState(m_Writer, DeliveryMethod.Unreliable, MiscHelper.MASK_REGISTRY_OR_CONNECTED); }
public void OnNetworkReceive(NetPeer peer, NetPacketReader reader, DeliveryMethod deliveryMethod) { try { //if (m_IsLog) Log("OnNetworkReceive " + peer.EndPoint + " method=" + deliveryMethod); var player = m_Players.GetPlayerByPeer(peer); if (player == null) { return; } var state = ReaderGameHelper.GetClientState(reader); //var prevState = player.State; //TODO: добавить действия которые присылает клиент(как ответы на команды от сервера) if (state == ClientState.Verification) { player.PlayerName = reader.GetString(); player.TypeUnit = (TypeUnit)reader.GetByte(); m_Players.ResolveDublicateName(player); } if (state != ClientState.Connected) { Log("OnNetworkReceive " + player + " setState=" + state + " frame=" + Time.frameCount); } player.State = state; //if (m_IsLog) Log("OnNetworkReceive " + player); if (player.IsConnected) { player.AddData(reader); } //if (MiscHelper.CheckIncludeInMask(state, MiscHelper.MASK_REGISTRY_OR_CONNECTED)) //{ // player.AddData(reader); //} } catch (System.Exception e) { if (m_IsLog) { Log("OnNetworkReceive bad data from " + (peer == null ? "Empty" : peer.EndPoint.ToString()) + " error=" + e, true); } return; } }
private void FixedUpdate() { if (Tick()) { return; } //обработка событий m_Server.PollEvents(); if (!IsStarted) { return; } //синхронизируем игроков на клиентах SendSyncPlayers(); //данные игрока for (int i = m_Players.Count - 1; i >= 0; i--) { var pl = m_Players[i]; if (!pl.IsConnected) { continue; } m_Writer.Reset(); ReaderGameHelper.AddCommand(m_Writer, ServerCommands.UpdateWorld); if (!pl.GetData(m_Writer)) { continue; } //if (m_IsLog) Log(string.Format("SendData ID={0} DataLen={1}", pl.ID, m_Writer.Length)); SendToAllWithState(m_Writer, DeliveryMethod.Unreliable, MiscHelper.MASK_REGISTRY_OR_CONNECTED); } //данные о зарегистрированных попаданиях if (GetHitsData()) { SendToAllWithState(m_Writer, DeliveryMethod.Unreliable, MiscHelper.MASK_REGISTRY_OR_CONNECTED); } //if (m_ClientPlayer != null) m_ClientPlayer.Update(m_Writer); }
void UpdatePlayer(NetPacketReader reader) { //if (m_IsLog) Log(string.Format("UpdatePlayer ID={0} StartInd={1} DataLen={2}", peer.EndPoint, reader.Position, reader.AvailableBytes)); if (!MiscHelper.CheckIncludeInMask(m_ClientPlayer.State, MiscHelper.MASK_REGISTRY_OR_CONNECTED)) { return; } var state = ReaderGameHelper.GetClientState(reader); var id = GetIDPlayer(reader); if (m_IsLog) { PeriodLog(string.Format("UpdatePlayer={0} state={1}", id, state)); } bool isClient = m_ClientPlayer.ID == id; if (isClient && state == ClientState.Disconnected) { //CallConnectEvents(new Args() { Event = ProcessConnection.Disconnected, Reason = "Server kicked out" }); return; } if (isClient && m_ClientPlayer.State != ClientState.Connected) { return; } var playerName = reader.GetString(); var player = m_Players.GetPlayer(id); var typeUnit = (TypeUnit)reader.GetByte(); if (player == null) { player = AddNewPlayer(id); } player.TypeUnit = typeUnit; player.PlayerName = playerName; player.State = state; player.AddData(reader); }
public override void Update(NetDataWriter writer) { if (m_State != ClientState.Connected) { return; } ReaderGameHelper.AddClientState(writer, m_State); int index = m_DataSend.Last + 1; m_DataSend.Add(index); writer.Put(index); var data = m_UnitControl.GetData(); if (writer.PutInWriter(data)) { //шоб наверняка) засрем канал)) int count = MiscHelper.CountPackets(DeliveryMethod.Unreliable); for (int i = 0; i < count; i++) { m_Peer.Send(writer, DeliveryMethod.Unreliable); } } }