fel
le

RPC szerver és kliens

Készítsük el az RPC technológiával azt a kliens és szervert, amely esetben a szerveren kulcsszavakat és adatokat lehet tárolni. A kliensek egymástól független "adatbázist" tárolnak a szerver oldalon. A klienseknek először be kell jelentkezniük, majd feltöltenek információkat (kulcs-érték párok), valamint képesek lekérdezni az értéket, ha megadják a kulcsot.

  • login(nev,pwd): bejelentkezés
  • feltolt(kulcs,info): feltöltés
  • kerdes(kulcs): lekérdezés

Interface forráskódja

namespace iteszk
{

    public interface IPeldanyosit
    {
        string peldanyKeszit();
    }

    public interface IKulcsErtek
    {
        bool bejelentkezes(string nev, string jelszo);
        void logout();
        void feltolt(string kulcs, string info);
        string kerdes(string kulcs);
    }
}
 

Kliens forráskódja

class Program
    {
        static void Main(string[] args)
        {
           IPeldanyosit m = (IPeldanyosit)Activator.GetObject(typeof(IPeldanyosit),"tcp://localhost:8085/Peldanyosito");
           string id = m.peldanyKeszit();
           IKulcsErtek b = (IKulcsErtek)Activator.GetObject( typeof(IKulcsErtek), "tcp://localhost:8085/" + id);

           Console.WriteLine("kliens elindult, várom a parancsokat");
           while (true)
           {
              string cmd = null;
              try
              {
                string s = Console.ReadLine(); // pl "LOGIN|zozó|titok123"
                string[] reszek = s.Split('|');
                cmd = reszek[0].ToUpper();
                switch (cmd)
                {
                    case "LOGIN":
                        string nev = reszek[1];
                        string pwd = reszek[2];
                        bool valasz = b.bejelentkezes(nev, pwd);
                        if (valasz == true) Console.WriteLine("sikeres login");
                        else Console.WriteLine("nem sikerült a login");
                        break;
                    case "LOGOUT":
                        b.logout();
                        Console.WriteLine("sikeres logout");
                        break;
                    // ..................
                    // ..................
                    // ..................
                    default:
                        Console.WriteLine("Ismeretlen parancs");
                        break;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Ismeretlen Hiba{0}",e.Message);
            }
          }
        }
    }
 

Szerver forráskódja

namespace szerver
{
    class Peldanyosito : MarshalByRefObject, IPeldanyosit
    {
        public string peldanyKeszit()
        {
            string id = Guid.NewGuid().ToString();
            RemotingConfiguration.RegisterWellKnownServiceType(
            typeof(BankiKomm),
            id,
            WellKnownObjectMode.Singleton
            );
            return id;
        }
    }
    class SzerverFunc : MarshalByRefObject, IKulcsErtek
    {
        public string logged_in = null;
        public Dictionary<String,String> dict = new Dictionary<String,String>();

        public bool bejelentkezes(string nev, string jelszo)
        {
            this.logged_in = nev;
            return true;
        }

        public void logout()
        {
            this.logged_in = null;
        }
        public void feltolt((string kulcs, string info)
        {
            if (this.logged_in == null)
                throw new Exception("Logolj be");
            dict[kulcs] = info;
        }

        public string lekerdez(string kulcs)
        {
            if (this.logged_in == null)
                throw new Exception("Logolj be");
            else
            return dict[kulcs];
        }

    }

    class Program
    {
        static int port = 8085;
        static void Main(string[] args)
        {
            TcpChannel chan = new TcpChannel(port);
            ChannelServices.RegisterChannel(chan, false);
            RemotingConfiguration.RegisterWellKnownServiceType(
               typeof(Peldanyosito),
               "Peldanyosito",
               WellKnownObjectMode.Singleton);
            Console.WriteLine("A szerver elindult");
            Console.ReadLine();
           
        }

       
    }
}
 
Hernyák Zoltán
2013-04-24 19:51:56