Beispiel #1
0
        public void fireAndForgetMessage(RconMessageType type, string command)
        {
            if (this.isInit == false)
            {
                return;
            }

            this.internalSendMessage(type, command, true);
        }
Beispiel #2
0
        public string sendMessage(RconMessageType type, string command)
        {
            if (this.isInit == false)
            {
                return(string.Empty);
            }

            return(this.internalSendMessage(type, command).Answer);
        }
Beispiel #3
0
        private RconMessageAnswer internalSendMessage(RconMessageType type, string command, bool fireAndForget = false)
        {
            this.threadLock.EnterWriteLock();

            try
            {
                var messageNumber = ++this.messageCounter;

                var msg = new List <byte>();
                msg.AddRange(BitConverter.GetBytes(10 + command.Length));
                msg.AddRange(BitConverter.GetBytes(messageNumber));
                msg.AddRange(BitConverter.GetBytes(type.Value));
                msg.AddRange(ASCIIEncoding.ASCII.GetBytes(command));
                msg.AddRange(PADDING);

                this.writer.Write(msg.ToArray());
                this.writer.Flush();
                this.threadLock.ExitWriteLock();

                if (fireAndForget && RconServerIsMultiThreaded)
                {
                    var id = messageNumber;
                    Task.Factory.StartNew(() =>
                    {
                        waitReadMessage(id);
                    });

                    return(RconMessageAnswer.EMPTY);
                }

                return(waitReadMessage(messageNumber));
            }
            catch
            {
                return(RconMessageAnswer.EMPTY);
            }
            finally
            {
                try
                {
                    this.threadLock.ExitWriteLock();
                }
                catch
                {
                }
            }
        }
        public void fireAndForgetMessage(RconMessageType type, string command)
        {
            if (this.isInit == false)
            {
                return;
            }

            this.internalSendMessage(type, command, true);
        }
        private RconMessageAnswer internalSendMessage(RconMessageType type, string command, bool fireAndForget = false)
        {
            this.threadLock.EnterWriteLock();

            try
            {
                var messageNumber = ++this.messageCounter;

                var msg = new List<byte>();
                msg.AddRange(BitConverter.GetBytes(10 + command.Length));
                msg.AddRange(BitConverter.GetBytes(messageNumber));
                msg.AddRange(BitConverter.GetBytes(type.Value));
                msg.AddRange(ASCIIEncoding.ASCII.GetBytes(command));
                msg.AddRange(PADDING);

                this.writer.Write(msg.ToArray());
                this.writer.Flush();
                this.threadLock.ExitWriteLock();

                if (fireAndForget && RconServerIsMultiThreaded)
                {
                    var id = messageNumber;
                    Task.Factory.StartNew(() =>
                    {
                        waitReadMessage(id);
                    });

                    return RconMessageAnswer.EMPTY;
                }

                return waitReadMessage(messageNumber);
            }
            catch
            {
                return RconMessageAnswer.EMPTY;
            }
            finally
            {
                try
                {
                    this.threadLock.ExitWriteLock();
                }
                catch
                {
                }
            }
        }
        public string sendMessage(RconMessageType type, string command)
        {
            if (this.isInit == false)
            {
                return string.Empty;
            }

            return this.internalSendMessage(type, command).Answer;
        }