Exemple #1
0
        public Server()
        {
            Console.Title         = ".:: Minerva - Cabal Online Sandbox - Chat Server ::.";
            Console.CursorVisible = false;

            int start = Environment.TickCount;

            Log.Start();                // Start logging service

            clients = new HashSet <ClientHandler>();
            events  = new EventHandler();
            events.OnClientDisconnect += (sender, client) => { Log.Notice("Client {0} disconnected from Chat Server", client.RemoteEndPoint); clients.Remove(client); };
            events.OnError            += (sender, message) => Log.Error(message);
            events.OnReceivePacket    += (sender, e) => Log.Received(e.Name, e.Opcode, e.Length);
            events.OnSendPacket       += (sender, e) => Log.Sent(e.Name, e.Opcode, e.Length);

            Util.Info.PrintLogo();
            Console.WriteLine();
            Util.Info.PrintInfo();
            Console.WriteLine();
            Console.ForegroundColor = Log.DefaultFG;

            /*Log.Message("Compiling and registering scripts...", Log.DefaultFG);
             * scripts = new ScriptHandler();
             * scripts.Concatenate("Events", new string[] { "mscorlib" });
             * scripts.Run("Events");
             * scripts.CreateInstance("Events");
             * dynamic result = scripts.Invoke("_init_", events);*/

            try
            {
                Log.Message("Reading configuration...", Log.DefaultFG);
                Configuration.Load("Chat");

                Log.Message("Registering packets...", Log.DefaultFG);
                packets = new PacketHandler("chat", Configuration.Protocol, events);

                var factory = new ChannelFactory <IChatContracts>(new NetTcpBinding(SecurityMode.None),
                                                                  new EndpointAddress("net.tcp://localhost:9003/Chat"));
                proxy = factory.CreateChannel();

                var dbfactory = new ChannelFactory <IDatabaseContracts>(new NetTcpBinding(SecurityMode.None),
                                                                        new EndpointAddress("net.tcp://localhost:9004/Database"));
                database = dbfactory.CreateChannel();

                Log.Notice("Created IPC channels");

                listener = new TcpListener(System.Net.IPAddress.Any, Configuration.Port);
                thread   = new Thread(Listen);
                thread.Start();

                Log.Notice("Minerva started in: {0} seconds", (float)(Environment.TickCount - start) / 1000.0f);
            }
            catch (Exception e)
            {
                Log.Error(e.Message);
#if DEBUG
                throw e;
#endif
            }
        }
Exemple #2
0
        public Server()
        {
            Console.Title         = ".:: Minerva - Cabal Online Sandbox - Login Server ::.";
            Console.CursorVisible = false;

            int start = Environment.TickCount;

            Log.Start();                // Start logging service

            clients = new HashSet <ClientHandler>();
            events  = new EventHandler();
            events.OnClientDisconnect += (sender, client) => { Log.Notice("Client {0} disconnected from Login Server", client.RemoteEndPoint); clients.Remove(client); };
            events.OnError            += (sender, message) => Log.Error(message);
            events.OnReceivePacket    += (sender, e) => Log.Received(e.Name, e.Opcode, e.Length);
            events.OnSendPacket       += (sender, e) => Log.Sent(e.Name, e.Opcode, e.Length);

            Util.Info.PrintLogo();
            Console.WriteLine();
            Util.Info.PrintInfo();
            Console.WriteLine();
            Console.ForegroundColor = Log.DefaultFG;

            Log.Message("Compiling and registering scripts...", Log.DefaultFG);
            scripts = new ScriptHandler();
            scripts.Concatenate("Events", new string[] { "mscorlib" });
            scripts.Run("Events");
            scripts.CreateInstance("Events");
            dynamic result = scripts.Invoke("_init_", events);

            try
            {
                Log.Message("Reading configuration...", Log.DefaultFG);
                Configuration.Load("Login");

                Log.Message("Registering packets...", Log.DefaultFG);
                packets = new PacketHandler("login", Configuration.Protocol, events);

                var factory = new ChannelFactory <ILoginContracts>(new NetTcpBinding(SecurityMode.None),
                                                                   new EndpointAddress(String.Format("net.tcp://{0}:9001/Login", Configuration.MasterIP)));
                proxy = factory.CreateChannel();

                var dbfactory = new ChannelFactory <IDatabaseContracts>(new NetTcpBinding(SecurityMode.None),
                                                                        new EndpointAddress(String.Format("net.tcp://{0}:9004/Database", Configuration.MasterIP)));
                database = dbfactory.CreateChannel();

                Log.Notice("Created IPC channels");

                var ads = Dns.GetHostEntry(Dns.GetHostName()).AddressList;

                foreach (var a in ads)
                {
                    if (a.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
                    {
                        continue;
                    }

                    lan = BitConverter.ToUInt32(a.GetAddressBytes(), 0);
                }

                listener = new TcpListener(IPAddress.Any, Configuration.Port);
                thread   = new Thread(Listen);
                thread.Start();

                Log.Notice("Minerva started in: {0} seconds", (float)(Environment.TickCount - start) / 1000.0f);
            }
            catch (Exception e)
            {
                Log.Error(e.Message);
#if DEBUG
                throw e;
#endif
            }
        }
Exemple #3
0
        public Server(int server, int channel)
        {
#if DEBUG
            Thread.Sleep(5000);
#endif

            this.server  = server;
            this.channel = channel;

            Console.Title         = ".:: Minerva - Cabal Online Sandbox - Channel Server ::.";
            Console.CursorVisible = false;

            int start = Environment.TickCount;

            Log.Start();                // Start logging service

            clients = new Dictionary <ulong, ClientHandler>();
            events  = new EventHandler();
            events.OnClientDisconnect += (sender, client) => { Log.Notice("Client {0} disconnected from Channel Server", client.RemoteEndPoint); clients.Remove((ulong)client.Metadata["magic"]); };
            events.OnError            += (sender, message) => { Log.Error(message); };
            events.OnReceivePacket    += (sender, e) => { Log.Received(e.Name, e.Opcode, e.Length); };
            events.OnSendPacket       += (sender, e) => { Log.Sent(e.Name, e.Opcode, e.Length); };
            events.OnWarp             += (sender, client, map, x, y) => { client.Metadata["map"] = maps[map]; maps[map].MoveClient(client, x / 16, y / 16); };

            Util.Info.PrintLogo();
            Console.WriteLine();
            Util.Info.PrintInfo();
            Console.WriteLine();
            Console.ForegroundColor = Log.DefaultFG;

            /*Console.WriteLine("Compiling and registering scripts...");
             * scripts = new ScriptHandler();
             * scripts.Concatenate("Events", new string[] { "mscorlib" });
             * scripts.Run("Events");
             * scripts.CreateInstance("Events");
             * dynamic result = scripts.Invoke("_init_", events);*/

            try
            {
                Log.Message("Reading configuration...", Log.DefaultFG);
                Configuration.Load(String.Format("Channel_{0}_{1}", server, channel));

                Log.Message("Loading warp data...", Log.DefaultFG);
                var xml = XDocument.Load("data/cabal.xml");

                var node       = xml.Root.Element("map");
                var deadReturn = new Dictionary <int, int[]>();

                foreach (var n in node.Elements("map_index"))
                {
                    deadReturn.Add(int.Parse(n.Attribute("world_id").Value), new[] { int.Parse(n.Attribute("dead_warp").Value),
                                                                                     int.Parse(n.Attribute("return_warp").Value) });
                }

                node = xml.Root.Element("warp_point");
                var warps = new List <WarpIndex>();

                foreach (var n in node.Elements("warp_index"))
                {
                    warps.Add(new WarpIndex(int.Parse(n.Attribute("x").Value),
                                            int.Parse(n.Attribute("y").Value),
                                            int.Parse(n.Attribute("nation1x").Value),
                                            int.Parse(n.Attribute("nation1y").Value),
                                            int.Parse(n.Attribute("nation2x").Value),
                                            int.Parse(n.Attribute("nation2y").Value),
                                            int.Parse(n.Attribute("w_code").Value),
                                            int.Parse(n.Attribute("Fee").Value),
                                            int.Parse(n.Attribute("WorldIdx").Value),
                                            int.Parse(n.Attribute("level").Value)));
                }

                node = xml.Root.Element("warp_npc");

                var warpNPCs = new Dictionary <int, Dictionary <int, List <WarpList> > >();

                foreach (var n in node.Elements("world"))
                {
                    var world = new Dictionary <int, List <WarpList> >();
                    var npcs  = n.Elements("npc");

                    foreach (var npc in npcs)
                    {
                        var list     = new List <WarpList>();
                        var warpList = npc.Elements("warp_list");

                        foreach (var w in warpList)
                        {
                            list.Add(new WarpList(int.Parse(w.Attribute("order").Value),
                                                  int.Parse(w.Attribute("type").Value),
                                                  int.Parse(w.Attribute("target_id").Value),
                                                  int.Parse(w.Attribute("level").Value),
                                                  int.Parse(w.Attribute("Fee").Value),
                                                  (w.Attribute("warp_item").Value != "") ? int.Parse(w.Attribute("warp_item").Value.Split(':')[0]) : 0,
                                                  (w.Attribute("warp_item").Value != "") ? int.Parse(w.Attribute("warp_item").Value.Split(':')[1]): 0,
                                                  (w.Attribute("quest_id").Value != "") ? int.Parse(w.Attribute("quest_id").Value) : 0,
                                                  int.Parse(w.Attribute("gps_view").Value) == 1));
                        }

                        world.Add(int.Parse(npc.FirstAttribute.Value), list);
                    }

                    warpNPCs.Add(int.Parse(n.FirstAttribute.Value), world);
                }

                Log.Message("Registering packets...", Log.DefaultFG);
                packets = new PacketHandler("world", Configuration.Protocol, events);

                var factory = new ChannelFactory <IChannelContracts>(new NetTcpBinding(SecurityMode.None),
                                                                     new EndpointAddress(String.Format("net.tcp://{0}:9002/Channel", Configuration.MasterIP)));
                proxy = factory.CreateChannel();

                var dbfactory = new ChannelFactory <IDatabaseContracts>(new NetTcpBinding(SecurityMode.None),
                                                                        new EndpointAddress(String.Format("net.tcp://{0}:9004/Database", Configuration.MasterIP)));
                database = dbfactory.CreateChannel();

                Log.Notice("Created IPC channels");

                var aa      = Configuration.IP.GetAddressBytes();
                var address = BitConverter.ToUInt32(aa, 0);

                proxy.AddChannel((byte)server, (byte)channel, 0, address, (short)Configuration.Port, (short)100);

                Log.Notice("Registered channel with Master");

                maps = new Dictionary <int, Map>();

                for (int i = 1; i < 31; i++)
                {
                    maps[i] = new Map(i, warps, (deadReturn.ContainsKey(i) ? deadReturn[i][0] : 1), (deadReturn.ContainsKey(i) ? deadReturn[i][1] : 1), (warpNPCs.ContainsKey(i) ? warpNPCs[i] : null));
                }

                listener = new TcpListener(System.Net.IPAddress.Any, Configuration.Port);
                thread   = new Thread(Listen);
                thread.Start();

                Log.Notice("Minerva started in: {0} seconds", (float)(Environment.TickCount - start) / 1000.0f);
            }
            catch (Exception e)
            {
                Log.Error(e.Message);
#if DEBUG
                throw e;
#endif
            }
        }