Esempio n. 1
0
        private RconOperationEventArgs InitResultObject(ManualResetEventSlim locker, AsyncRconOperationDelegate callback, object state)
        {
            RconOperationEventArgs result;

            if (locker == null) //async
            {
                AsyncRconOperationEventArgs asyncResult = new AsyncRconOperationEventArgs();
                asyncResult.Callback = callback;
                asyncResult.State    = state;
                result = asyncResult;
            }
            else //sync
            {
                result        = new RconOperationEventArgs();
                result.Locker = locker;
            }

            //result.OperationId = GetOperationId();

            return(result);
        }
Esempio n. 2
0
        private RconOperationEventArgs StartExecuteCommand(string command, ManualResetEventSlim locker, AsyncRconOperationDelegate callback, object state)
        {
            RconOperationEventArgs evArgs = InitResultObject(locker, callback, state);

            evArgs.Operation = RconOperationType.ExecuteCommand;

            int id = GetOperationId();

            lock (_currentOperationsLock) _currentOperations.Add(id, evArgs);

            using (PacketWriter writer = new PacketWriter())
            {
                writer.Write(id);
                writer.Write(SERVERDATA_EXECCOMMAND);
                writer.Write(Encoding.ASCII.GetBytes(command));
                writer.Write(0); //null terminated string
                writer.Write(0); //empty

                SendPacket(writer.Data);
            }

            return(evArgs);
        }
Esempio n. 3
0
 public void ExecuteCommandAsync(string command, AsyncRconOperationDelegate callback, object state = null)
 {
     StartExecuteCommand(command, null, callback, state);
 }
Esempio n. 4
0
 public void ConnectAsync(IPEndPoint ipEndPoint, string rconPassword, AsyncRconOperationDelegate callback, object state = null)
 {
     StartConnect(ipEndPoint, rconPassword, null, callback, state);
 }
Esempio n. 5
0
        private RconOperationEventArgs StartConnect(IPEndPoint ipEndPoint, string rconPassword, ManualResetEventSlim locker, AsyncRconOperationDelegate callback, object state)
        {
            if (_socket != null && _socket.Connected)
            {
                throw new InvalidOperationException("You are already connected! Please disconnect first");
            }
            _currentOperations = new Dictionary <int, RconOperationEventArgs>();

            RconOperationEventArgs evArgs = InitResultObject(locker, callback, state);

            evArgs.Operation = RconOperationType.Connect;

            _connectOperationId = GetOperationId();
            lock (_currentOperationsLock) _currentOperations.Add(_connectOperationId, evArgs);

            _rconPassword = rconPassword;
            _socket       = new Socket(ipEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
            _socket.BeginConnect(ipEndPoint, ConnectCallback, null);

            return(evArgs);
        }