Ejemplo n.º 1
0
 private void GameClient_DataRecieved(GClient sender, Packet packet, int channel)
 {
     CSteamID steamIDSender = sender.ConnectedTo;
     if (packet.PacketID == 0x001122)
     {
         int randomNumber = packet.ReadInteger();
         Debug.LogFormat("Random Number from Server: {0}", randomNumber);
     }
     Debug.LogFormat("Got message type 0x{0}.", packet.PacketID.ToString("X4"));
 }
Ejemplo n.º 2
0
        public void Update()
        {
            if (!Initalized)
                return;

            GameServer.RunCallbacks();

            if (SteamConnected)
            {
                if (UpdateServerDetails != null)
                    UpdateServerDetails();
            }

            byte[] recvBuffer;

            uint msgSize;
            CSteamID steamIDRemote;

            while(SteamGameServerNetworking.IsP2PPacketAvailable(out msgSize)){
                recvBuffer = new byte[msgSize];

                if(!SteamGameServerNetworking.ReadP2PPacket( recvBuffer, msgSize, out msgSize, out steamIDRemote ))
                    break;

                Packet packet = new Packet(this, false);
                packet.Bytes = recvBuffer;

                try{
                    if (packet.PacketID == Packet.PACKET_DOAUTH)
                    {
                        // TODO: Cause server to handle Steam Authentication.
                        int byteCount = packet.ReadInteger();
                        OnClientWantsAuth(steamIDRemote, packet.ReadByteArray(byteCount), byteCount);
                    }
                    else if (packet.PacketID == Packet.PACKET_SESSIONINFO)
                    {
                        Packet msg = CreatePacket(Packet.PACKET_SESSIONINFO);
                        msg.Write(SteamGameServer.GetSteamID().m_SteamID);
                        msg.Write(SteamGameServer.BSecure());
                        msg.Write(Name);
                        msg.Send(EP2PSend.k_EP2PSendReliable, 0, steamIDRemote);
                    }
                    else if (packet.PacketID == Packet.PACKET_USERDISCONNECTED)
                    {
                        if (_Players.ContainsKey(steamIDRemote))
                        {
                            if(_Players[steamIDRemote] == EPlayerStatus.Pending)
                            {
                                SteamGameServer.SendUserDisconnect(steamIDRemote);
                                _Players.Remove(steamIDRemote);
                            }
                            else
                            {
                                RemovePlayerFromServer(steamIDRemote);
                            }
                        }
                        else
                        {
                            Debug.LogWarning("How the absoulte loving TomSka joke in a game did this happen? No matching client???");
                        }

                    }
                    else if(packet.PacketID == Packet.PACKET_INTRODUCTION)
                    {
                        string connectionString = packet.ReadString();
                        _UserNames.Add(steamIDRemote, packet.ReadString());

                        Packet msg = CreatePacket(Packet.PACKET_INTRODUCTION);

                        msg.Write(connectionString);

                        msg.Send(EP2PSend.k_EP2PSendReliable, 0, steamIDRemote);
                        Debug.LogFormat("Sent PACKET_INTRODUCTION with connection string of \"{0}\" to {1}.", connectionString, steamIDRemote);
                    }
                }
                finally{
                    packet.Seek();
                }

                if (DataRecieved != null)
                    DataRecieved(steamIDRemote, packet, 0);

                packet.Dispose();
            }

            foreach(int channel in _ExtraChannels)
            {
                if (channel == 0) // We Handle it up above.
                    continue;
                while (SteamGameServerNetworking.IsP2PPacketAvailable(out msgSize, channel))
                {
                    recvBuffer = new byte[msgSize];

                    if (!SteamGameServerNetworking.ReadP2PPacket(recvBuffer, msgSize, out msgSize, out steamIDRemote))
                        break;

                    Packet packet = new Packet(this, false);
                    packet.Bytes = recvBuffer;

                    if (DataRecieved != null)
                        DataRecieved(steamIDRemote, packet, channel);

                    packet.Dispose();
                }
            }
        }