コード例 #1
0
ファイル: SourceRcon.cs プロジェクト: geotavros/svn
        public bool Connect(IPEndPoint Server, string password)
        {
            try
            {
                S.Connect(Server);
            }
            catch (SocketException)
            {
                OnError(ConnectionFailedString);
                OnConnectionSuccess(false);
                return(false);
            }

            RCONPacket SA = new RCONPacket();

            SA.RequestId      = 1;
            SA.String1        = password;
            SA.ServerDataSent = RCONPacket.SERVERDATA_sent.SERVERDATA_AUTH;

            SendRCONPacket(SA);

            // This is the first time we've sent, so we can start listening now!
            StartGetNewPacket();

            return(true);
        }
コード例 #2
0
ファイル: SourceRcon.cs プロジェクト: MikeJ83/TF2-PUG-Bot
        public bool Connect( IPEndPoint Server, string password )
        {
            try
            {
                S.Connect( Server );
            }
            catch (SocketException)
            {
                OnError( ConnectionFailedString );
                OnConnectionSuccess( false );
                return false;
            }

            RCONPacket SA = new RCONPacket();
            SA.RequestId = 1;
            SA.String1 = password;
            SA.ServerDataSent = RCONPacket.SERVERDATA_sent.SERVERDATA_AUTH;

            SendRCONPacket( SA );

            // This is the first time we've sent, so we can start listening now!
            StartGetNewPacket();

            return true;
        }
コード例 #3
0
ファイル: SourceRcon.cs プロジェクト: geotavros/svn
 public void ServerCommand(string command)
 {
     if (connected)
     {
         RCONPacket PacketToSend = new RCONPacket();
         PacketToSend.RequestId      = 2;
         PacketToSend.ServerDataSent = RCONPacket.SERVERDATA_sent.SERVERDATA_EXECCOMMAND;
         PacketToSend.String1        = command;
         SendRCONPacket(PacketToSend);
     }
 }
コード例 #4
0
        void ProcessIncomingData(RecState state)
        {
            if (state.IsPacketLength)
            {
                // First 4 bytes of a new packet.
                state.PacketLength = BitConverter.ToInt32(state.Data, 0);

                state.IsPacketLength = false;
                state.BytesSoFar     = 0;
                state.Data           = new byte[state.PacketLength];
                S.BeginReceive(state.Data, 0, state.PacketLength, SocketFlags.None, new AsyncCallback(ReceiveCallback), state);
            }
            else
            {
                // Do something with data...

                if (state.BytesSoFar < state.PacketLength)
                {
                    // Missing data.
                    S.BeginReceive(state.Data, state.BytesSoFar, state.PacketLength - state.BytesSoFar, SocketFlags.None, new AsyncCallback(ReceiveCallback), state);
                }
                else if (state.BytesSoFar == 0 && state.PacketLength == 0)
                {
                    // Timeout

                    OnError(ConnectionClosed);
                    //OnConnectionSuccess(false);
                }
                else
                {
                    // Process data.
#if DEBUG
                    Console.WriteLine("Complete packet.");
#endif

                    RCONPacket RetPack = new RCONPacket();
                    RetPack.ParseFromBytes(state.Data, this);

                    ProcessResponse(RetPack);

                    // Wait for new packet.
                    StartGetNewPacket();
                }
            }
        }
コード例 #5
0
ファイル: SourceRcon.cs プロジェクト: geotavros/svn
        void ProcessResponse(RCONPacket P)
        {
            switch (P.ServerDataReceived)
            {
            case RCONPacket.SERVERDATA_rec.SERVERDATA_AUTH_RESPONSE:
                if (P.RequestId != -1)
                {
                    // Connected.
                    connected = true;
                    OnError(ConnectionSuccessString);
                    OnConnectionSuccess(true);
                }
                else
                {
                    // Failed!
                    OnError(ConnectionFailedString);
                    OnConnectionSuccess(false);
                }
                break;

            case RCONPacket.SERVERDATA_rec.SERVERDATA_RESPONSE_VALUE:
                if (hadjunkpacket)
                {
                    // Real packet!
                    OnServerOutput(P.String1);
                }
                else
                {
                    hadjunkpacket = true;
                    OnError(GotJunkPacket);
                }
                break;

            default:
                OnError(UnknownResponseType);
                break;
            }
        }
コード例 #6
0
        public void Connect(IPEndPoint Server, string password)
        {
            IAsyncResult result = S.BeginConnect(Server, null, null);

            result.AsyncWaitHandle.WaitOne(RConControl.GlobalConstants.RCON_CONNECT_TIMEOUT, true);
            if (!result.IsCompleted || !S.Connected)
            {
                S.Close();
                OnError(ConnectionFailedString);
            }
            else
            {
                RCONPacket SA = new RCONPacket();
                SA.RequestId      = 1;
                SA.String1        = password;
                SA.ServerDataSent = RCONPacket.SERVERDATA_sent.SERVERDATA_AUTH;

                SendRCONPacket(SA);

                // This is the first time we've sent, so we can start listening now!
                StartGetNewPacket();
            }
        }
コード例 #7
0
ファイル: SourceRcon.cs プロジェクト: geotavros/svn
 void SendRCONPacket(RCONPacket p)
 {
     byte[] Packet = p.OutputAsBytes();
     S.BeginSend(Packet, 0, Packet.Length, SocketFlags.None, new AsyncCallback(SendCallback), this);
 }
コード例 #8
0
 private void SendRCONPacket(RCONPacket p)
 {
     byte[] Packet = p.OutputAsBytes();
     S.BeginSend(Packet, 0, Packet.Length, SocketFlags.None, SendCallback, this);
 }
コード例 #9
0
ファイル: SourceRcon.cs プロジェクト: MikeJ83/TF2-PUG-Bot
 void SendRCONPacket( RCONPacket p )
 {
     byte[] Packet = p.OutputAsBytes();
     S.BeginSend( Packet, 0, Packet.Length, SocketFlags.None, new AsyncCallback( SendCallback ), this );
 }
コード例 #10
0
ファイル: SourceRcon.cs プロジェクト: MikeJ83/TF2-PUG-Bot
 void ProcessResponse( RCONPacket P )
 {
     switch (P.ServerDataReceived)
     {
         case RCONPacket.SERVERDATA_rec.SERVERDATA_AUTH_RESPONSE:
             if (P.RequestId != -1)
             {
                 // Connected.
                 connected = true;
                 OnError( ConnectionSuccessString );
                 OnConnectionSuccess( true );
             }
             else
             {
                 // Failed!
                 OnError( ConnectionFailedString );
                 OnConnectionSuccess( false );
             }
             break;
         case RCONPacket.SERVERDATA_rec.SERVERDATA_RESPONSE_VALUE:
             if (hadjunkpacket)
             {
                 // Real packet!
                 OnServerOutput( P.String1 );
             }
             else
             {
                 hadjunkpacket = true;
                 OnError( GotJunkPacket );
             }
             break;
         default:
             OnError( UnknownResponseType );
             break;
     }
 }
コード例 #11
0
ファイル: SourceRcon.cs プロジェクト: MikeJ83/TF2-PUG-Bot
        void ProcessIncomingData( RecState state )
        {
            if (state.IsPacketLength)
            {
                // First 4 bytes of a new packet.
                state.PacketLength = BitConverter.ToInt32( state.Data, 0 );

                state.IsPacketLength = false;
                state.BytesSoFar = 0;
                state.Data = new byte[state.PacketLength];
                S.BeginReceive( state.Data, 0, state.PacketLength, SocketFlags.None, new AsyncCallback( ReceiveCallback ), state );
            }
            else
            {
                // Do something with data...

                if (state.BytesSoFar < state.PacketLength)
                {
                    // Missing data.
                    S.BeginReceive( state.Data, state.BytesSoFar, state.PacketLength - state.BytesSoFar, SocketFlags.None, new AsyncCallback( ReceiveCallback ), state );
                }
                else
                {
                    // Process data.
            #if DEBUG
                    Console.WriteLine( "Complete packet." );
            #endif

                    RCONPacket RetPack = new RCONPacket();
                    RetPack.ParseFromBytes( state.Data, this );

                    ProcessResponse( RetPack );

                    // Wait for new packet.
                    StartGetNewPacket();
                }
            }
        }
コード例 #12
0
ファイル: SourceRcon.cs プロジェクト: MikeJ83/TF2-PUG-Bot
 public void ServerCommand( string command )
 {
     if (connected)
     {
         RCONPacket PacketToSend = new RCONPacket();
         PacketToSend.RequestId = 2;
         PacketToSend.ServerDataSent = RCONPacket.SERVERDATA_sent.SERVERDATA_EXECCOMMAND;
         PacketToSend.String1 = command;
         SendRCONPacket( PacketToSend );
     }
 }