CMD - Während Benutzereingabe Text hinzufügen

08/20/2011 20:39 V8II#1
Hey,
Ich möchte mit dem CMD eine Art Konsole für meinen Server machen. Im CMD sollen alle Ereignisse gezeigt werden und wenn der User was schreibt sollen bei bestimmten Texten Funktionen ausgeführt werden.

Hier meine Funktionen:

Es funktioniert gut bis auf eine Macke:
Der User kann nur schreiben wenn CMDread ausgeführt wird, allerdings während dieser Befehl ausgeführt wird kann der Server nicht weiterlaufen was zu Laggs führt. Wenn CMDread jedoch nicht ausgeführt wird kann der User im CMD nicht schreiben ...

Hat jemand eine Lösung?
08/23/2011 15:59 ZeraPain#2
warum baust du dir nicht einfach eine eigene konsole?
08/24/2011 08:31 V8II#3
Habe ich bereits, sie sieht nur etwas crap aus =)
Ich möchte nur auf sie zurückgreifen falls ich weder hier noch auf der deutschen Autoit Seite eine Lösung finde/bekomme.
08/24/2011 10:49 ZeraPain#4
hm okay, verständlich ;-)

ich weiß nicht genau was du machen willst aber für konsolen anwendungen würde ich einfach mal spontan C# vorschlagen.

wenn es für dich nicht zu aufwändig ist (die basics sind ja nicht schwer) dann kannst du ja einfach deinen code kurz in c# implementieren.

ansonsten wüsste ich auch nicht genau wie das in autoit funktioniert.

ein beispiel würde so aussehen:

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication
{
    class Program
    {
        private static bool exit;

        static void Main(string[] args)
        {
            Console.WriteLine("bla blub Server Konsole ;-)");

            while (!exit)
            {
                switch (Console.ReadLine())
                {
                    case "test":
                        Console.WriteLine("-> bla blub test cmd");
                        break;
                    case "exit":
                        exit = true;
                        break;
                }
            }
        }
    }
}
08/24/2011 11:18 BlackHybrid#5
Also ich würde es dir auch raten eine eigene Console zu bauen. Weil ob das sonst am ende wirklich leistungseffizient wird mag ich zu bezweifeln.
08/24/2011 13:00 V8II#6
@ZeraPain Okay danke.
Könntest du mir noch sagen wie man in c# in eine Ini-Datei schreibt und sie ausliest?
Ich habe vor ein Programm mit C# zu machen das eben nur die Konsole erstellt. Befehle/Eingaben sollen per Ini-datei weitergegeben werden ...

Edit: Gibt es einen alternativen Editor & Compiler zu Visual C# 2010 ? Meine 30 Tage Testversion ist
schon abgelaufen -.-

Edit2: Habe einen Compiler gefunden der sogar Platformunabhängigkeit verspricht! Das Prog läuft dann also auch auf Linux usw. Mal schauen ob der was taugt!

Edit3: Er taugt zwar was allerdings werden im mitgelieferten Editor keine Befehle vorgeschlagen was mir als Anfänger ziemlich fehlt.

Edit 4 =): Okay habe jetzt wieder Visual C#
Allerdings genau das selbe Problem: Bei dem Teil in deinem Programm wo das Programm auf eine eingabe wartet, sprich
PHP Code:
 switch (Console.ReadLine()) 
Kann der Server nicht weiterlaufen/Kann das Programm nichts in die Konsole schreiben bis der User was eingegeben hat.
08/24/2011 15:14 ZeraPain#7
Also eine ini kannst du z.b. so verwalten:

Code:
using System;
using System.Runtime.InteropServices;
using System.Text;

namespace ZPBot.Common
{
    class IniFile
    {
        private string path;

        [DllImport("kernel32")]
        private static extern long WritePrivateProfileString(string section,
            string key, string val, string filePath);
        [DllImport("kernel32")]
        private static extern int GetPrivateProfileString(string section,
                 string key, string def, StringBuilder retVal,
            int size, string filePath);

        public IniFile(string INIPath)
        {
            path = INIPath;
        }

        public void Write(string Section, string Key, string Value)
        {
            WritePrivateProfileString(Section, Key, Value, path);
        }

        public string Read(string Section, string Key)
        {
            StringBuilder temp = new StringBuilder(255);
            int i = GetPrivateProfileString(Section, Key, "", temp,
                                            255, path);

            return temp.ToString();
        }

        public bool Bool(string Section, string Key)
        {
            StringBuilder temp = new StringBuilder(255);
            int i = GetPrivateProfileString(Section, Key, "", temp,
                                            255, path);

            if (temp.ToString() == true.ToString())
                return true;
            else
                return false;
        }

        public void RemoveSection(string pSection)
        {
            WritePrivateProfileString(pSection, null, null, path);
        }
    }
}
Quote:
Originally Posted by V8II View Post
Edit 4 =): Okay habe jetzt wieder Visual C#
Allerdings genau das selbe Problem: Bei dem Teil in deinem Programm wo das Programm auf eine eingabe wartet, sprich
PHP Code:
 switch (Console.ReadLine()) 
Kann der Server nicht weiterlaufen/Kann das Programm nichts in die Konsole schreiben bis der User was eingegeben hat.
das ist das gute an C#. da lässt sich leicht(er) abhilfe schaffen z.b. mit threads ;-)

wenn du willst kann ich dir das auch noch erklären.
ansonsten findest du bestimmt auch ein tutorial irgendwo
08/24/2011 16:13 V8II#8
Okay, ein fettes Dankeschön!
Wie "mache" ich jetzt am leichtesten einen 2ten. Thread? Habe bisschen gesucht aber grundlegend nur Bahnhof verstanden ...
08/24/2011 16:43 buFFy!#9
[Only registered and activated users can see links. Click Here To Register...]
08/24/2011 16:58 ZeraPain#10
sowas z.b.

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ConsoleApplication
{
    class Program
    {
        private static bool exit;
        private static Thread ConsoleInput;

        static void Main(string[] args)
        {
            Console.WriteLine("bla blub Server Konsole ;-)");

            ConsoleInput = new Thread(ReadConsoleInput);
            ConsoleInput.Start();

            while (!exit)
            {
                Console.WriteLine("Main Thread");
                Thread.Sleep(2000);
            }
        }

        private static void ReadConsoleInput()
        {
            while (!exit)
            {
                switch (Console.ReadLine())
                {
                    case "test":
                        Console.WriteLine("-> bla blub test cmd");
                        break;
                    case "exit":
                        exit = true;
                        break;
                }
            }
        }
    }
}