Ejemplo n.º 1
0
        public void SendLoginResponse(byte[] data)
        {
            var iPkt = new UA_LOGIN_REQ();

            iPkt.SetData(data);
            SysCons.LogInfo("UA_LOGIN_REQ UserID({0}) CodePage({1}) Version({2}.{3})", iPkt.UserID, iPkt.CodePage, iPkt.MajorVer, iPkt.MinorVer);
            Username  = iPkt.UserID;
            Password  = iPkt.UserPW;
            AccountID = (uint)AuthDB.GetAccountID(Username);

            using (var oPkt = new AU_COMMERCIAL_SETTING_NFY())
            {
                oPkt.BuildPacket();
                Client.Send(oPkt.Data);
            }

            using (var oPkt = new AU_LOGIN_RES())
            {
                oPkt.UserID    = iPkt.UserID;
                oPkt.AccountID = AccountID;
                oPkt.AllowedFunctionForDeveloper = 65535;
                oPkt.AuthKey       = "SE@WASDE#$RFWD@D";
                oPkt.ResultCode    = (ushort)AuthDB.CheckAccount(this.Username, this.Password);
                oPkt.lastServerID  = 255;
                oPkt.lastChannelID = 255;
                oPkt.BuildCharServerList();
                oPkt.BuildPacket();
                Client.Send(oPkt.Data);
            }
        }
Ejemplo n.º 2
0
        private void AcceptCallback(IAsyncResult result)
        {
            if (Listener == null)
            {
                return;
            }

            try
            {
                Socket socket = Listener.EndAccept(result);      // Finish accepting the incoming connection.
                Client client = new Client(this, socket);        // Add the new connection to the dictionary.

                lock (ClientLock) Clients[socket] = client;      // add the connection to list.

                OnClientConnection(new ClientEventArgs(client)); // Raise the OnConnect event.

                client.BeginReceive(ReceiveCallback, client);    // Begin receiving on the new connection connection.
                Listener.BeginAccept(AcceptCallback, null);      // Continue receiving other incoming connection asynchronously.
            }
            catch (NullReferenceException) { } // we recive this after issuing server-shutdown, just ignore it.
            catch (Exception e)
            {
                SysCons.LogError("AcceptCallback: {0}", e);
            }
        }
Ejemplo n.º 3
0
        public void CheckPacket(byte[] data, CharClient client)
        {
            this.pkt = new Packet();
            pkt.SetData(data);
            this.client = client;
            if ((PacketOpcodes)pkt.Opcode != PacketOpcodes.SYS_ALIVE)
            {
                SysCons.LogInfo("Recv Packet({0}) Len({1}) Enc({2}) Opcode({3})", PacketDefinitions.getPacketName(pkt.Opcode), pkt.Lenght, pkt.Encrypt, pkt.Opcode);
            }
            switch ((PacketOpcodes)pkt.Opcode)
            {
            case PacketOpcodes.SYS_ALIVE: /* TO SKIP LOGGING THIS PACKET */ break;

            case PacketOpcodes.SYS_HANDSHAKE_RES: client.SendHandShakeRes(); break;

            case PacketOpcodes.UC_LOGIN_REQ: client.SendLoginResponse(data); break;

            case PacketOpcodes.UC_CHARACTER_SERVERLIST_REQ: client.SendServerList(false); break;

            case PacketOpcodes.UC_CHARACTER_SERVERLIST_ONE_REQ: client.SendServerList(true); break;

            case PacketOpcodes.UC_CHARACTER_ADD_REQ: client.SendCharacterAdd(data); break;

            //case PacketOpcodes.UC_CHARACTER_ADD_REQ: client.SendCharacterCreate(data); break;
            case PacketOpcodes.UC_CHARACTER_SELECT_REQ: client.SendCharacterSelect(data); break;

            case PacketOpcodes.UC_CHARACTER_EXIT_REQ: client.SendCharacterExit(data); break;

            case PacketOpcodes.UC_CHARACTER_LOAD_REQ: client.SendCharacterLoad(data); break;

            case PacketOpcodes.UC_CONNECT_WAIT_CHECK_REQ: client.SendWaitCheck(data); break;

            default: PacketDefinitions.LogPacketData(pkt); break;
            }
        }
Ejemplo n.º 4
0
        internal void SendGameEnter(byte[] data)
        {
            // to do UG_GAME_ENTER_REQ
            SysCons.LogInfo("UG_GAME_ENTER_REQ");
            GU_GAME_ENTER_RES sPkt = new GU_GAME_ENTER_RES();

            sPkt.ResultCode           = 500;
            sPkt.achCommunityServerIP = Encoding.ASCII.GetBytes("127.0.0.1");
            sPkt.wCommunityServerPort = 50700;
            SysCons.LogInfo("GU_GAME_ENTER_RES IPAddress({0}) Port({1}) wysylam namiary ziom", sPkt.achCommunityServerIP.ToString(), sPkt.wCommunityServerPort.ToString());
            sPkt.BuildPacket();
            this.Client.Send(sPkt.Data);
            // O WCHUJ PACKETOW JEDZIEM zerami
            // GU_AVATAR_CHAR_INFO

            // GU_AVATAR_ITEM_INFO

            //GU_AVATAR_SKILL_INFO

            //GU_AVATAR_HTB_INFO

            //GU_QUICK_SLOT_INFO

            //GU_WAR_FOG_INFO

            //GU_AVATAR_BUFF_INFO

            //GU_AVATAR_INFO_END
            SysCons.LogInfo("GU_AVATAR_INFO_END");
            Packet pkt = new Packet();

            pkt.Opcode = (ushort)PacketOpcodes.GU_AVATAR_INFO_END;
            pkt.BuildPacket();
            this.Client.Send(pkt.Data);
        }
Ejemplo n.º 5
0
        public void SendCharacterLoad(byte[] data)
        {
            var iPkt = new UC_CHARACTER_LOAD_REQ();

            iPkt.SetData(data);
            SysCons.LogInfo("UC_CHARACTER_LOAD_REQ AccountID({0}) LastServerID({1})", iPkt.AccountID, iPkt.ServerID);

            AccountID = iPkt.AccountID;
            ServerID  = iPkt.ServerID;

            using (var oPkt = new CU_SERVER_CHANNEL_INFO())
            {
                oPkt.BuildChannelList(iPkt.ServerID);
                oPkt.BuildPacket();
                Client.Send(oPkt.Data);
            }

            using (var oPkt = new CU_CHARACTER_INFO())
            {
                oPkt.BuildCharList(AccountID, ServerID);
                oPkt.BuildPacket();
                SysCons.SavePacket(oPkt);
                Client.Send(oPkt.Data);
            }

            using (var oPkt = new CU_CHARACTER_LOAD_RES())
            {
                oPkt.ServerID = iPkt.ServerID;
                oPkt.BuildPacket();
                Client.Send(oPkt.Data);
            }
        }
Ejemplo n.º 6
0
        internal void EnterWolrd(byte[] data)
        {
            // pakiet UG_ENTER_WORLD nie ma nic
            SysCons.LogInfo("UG_ENTER_WORLD");
            //GU_NETMARBLEMEMBERIP_NFY
            SysCons.LogInfo("GU_NETMARBLEMEMBERSHIP_NFY");

            Packet pkt = new Packet();

            pkt.Opcode = (ushort)PacketOpcodes.GU_NETMARBLEMEMBERIP_NFY;
            pkt.BuildPacket();
            this.Client.Send(pkt.Data);
            // jakis pakiet na surowo
            //ContentsOnOff
            SysCons.LogInfo("GU_SERVER_CONTENTS_ONOFF");
            byte[] contents_onoff = { 0x00, 0x00, 0x40, 0xb1, 0xff, 0x12, 0x00, 0xf8, 0x01, 0x00, 0x00, 0x90, 0x00, 0x06, 0xda, 0x08, 0x00, 0x00, 0xd7, 0x08, 0x00, 0x00, 0xdb, 0x08, 0x00, 0x00, 0xd8, 0x08, 0x00, 0x00, 0xdc, 0x08, 0x00, 0x00, 0xd9, 0x08, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 };
            Packet pkt2           = new Packet();

            pkt2.Opcode = (ushort)PacketOpcodes.GU_SERVER_CONTENTS_ONOFF;
            pkt2.BuildPacket();
            pkt2.Data.Equals(contents_onoff);
            this.Client.Send(pkt2.Data);

            //GU_AVATAR_WORLD_INFO
            //GU_ENTER_WORLD_COMPLETE
            SysCons.LogInfo("GU_ENTER_WORLD_COMPLETE");
            Packet pkt3 = new Packet();

            pkt3.Opcode = (ushort)PacketOpcodes.GU_ENTER_WORLD_COMPLETE;
            pkt3.BuildPacket();
            this.Client.Send(pkt3.Data);
        }
Ejemplo n.º 7
0
        public void SendServerList(Boolean isOnlyOne)
        {
            SysCons.LogInfo("CU_SERVER_FARM_INFO Sending {0} server(s) information", CharConfig.Instance.GameServerCount);
            for (int i = 0; i < CharConfig.Instance.GameServerCount; ++i)
            {
                var oPkt  = new CU_SERVER_FARM_INFO();
                int srvid = i + 1;

                oPkt.ServerID     = (byte)srvid;
                oPkt.MaxLoad      = 100;
                oPkt.Load         = 0;
                oPkt.ServerStatus = 0;
                oPkt.ServerName   = CharConfig.Instance.GetGameServerName(srvid);
                oPkt.BuildPacket();
                this.Client.Send(oPkt.Data);
            }

            if (isOnlyOne)
            {
                var oPkt = new CU_CHARACTER_SERVERLIST_ONE_RES();
                oPkt.BuildPacket();
                this.Client.Send(oPkt.Data);
            }
            else
            {
                var oPkt = new CU_CHARACTER_SERVERLIST_RES();
                oPkt.BuildPacket();
                this.Client.Send(oPkt.Data);
            }
        }
Ejemplo n.º 8
0
        public void SendLoginResponse(byte[] data)
        {
            Packet oPkt = new Packet();

            oPkt.Opcode = (ushort)PacketOpcodes.AU_COMMERCIAL_SETTING_NFY;
            oPkt.BuildPacket();
            this.Client.Send(oPkt.Data);

            UA_LOGIN_REQ inPkt = new UA_LOGIN_REQ();

            inPkt.SetData(data);
            SysCons.LogInfo("UA_LOGIN_REQ {0} CodePage({1}) {2}.{3}", inPkt.UserID, inPkt.CodePage, inPkt.MajorVer, inPkt.MinorVer);
            this.Username  = inPkt.UserID;
            this.Password  = inPkt.UserPW;
            this.AccountID = (uint)AuthDB.GetAccountID(this.Username);

            AU_LOGIN_RES sPkt = new AU_LOGIN_RES();

            sPkt.UserID    = inPkt.UserID;
            sPkt.AccountID = this.AccountID;
            sPkt.AllowedFunctionForDeveloper = 65535;
            sPkt.AuthKey       = Encoding.ASCII.GetBytes("SE@WASDE#$RFWD@D");
            sPkt.ResultCode    = (ushort)AuthDB.CheckAccount(this.Username, this.Password);
            sPkt.lastServerID  = 255;
            sPkt.lastChannelID = 255;
            sPkt.BuildCharServerList();
            sPkt.BuildPacket();
            this.Client.Send(sPkt.Data);
        }
Ejemplo n.º 9
0
        internal void ChatSendMessageSay(byte[] data)
        {
            SysCons.LogInfo("UT_CHAT_MESSAGE_SAY");
            Packet pkt = new Packet();

            pkt.Opcode = (ushort)PacketOpcodes.TU_CHAT_MESSAGE_SAY;
            pkt.BuildPacket();
            //this.Client.Send(pkt.Data);
        }
Ejemplo n.º 10
0
 public static void Shutdown()
 {
     if (Serv != null)
     {
         SysCons.LogInfo("Shutting down CharServer..");
         Serv.Shutdown();
     }
     Environment.Exit(0);
 }
Ejemplo n.º 11
0
 public override void Run()
 {
     Console.Title = "DBO Community Server";
     if (!this.Listen(CommConfig.Instance.BindIP, CommConfig.Instance.Port))
     {
         return;
     }
     SysCons.LogInfo("CommunityServer is listening on {0}:{1}...", CommConfig.Instance.BindIP, CommConfig.Instance.Port);
 }
Ejemplo n.º 12
0
        internal void SendCharacterExit(byte[] data)
        {
            SysCons.LogInfo("UC_CHARACTER_EXIT_REQ disconnected  client");
            Packet sPkt = new Packet();

            sPkt.Opcode = (ushort)PacketOpcodes.CU_CHARACTER_EXIT_RES;
            sPkt.BuildPacket();
            this.Client.Send(sPkt.Data);
        }
Ejemplo n.º 13
0
 public override void Run()
 {
     Console.Title = "DBO Auth Server";
     if (!this.Listen(AuthConfig.Instance.BindIP, AuthConfig.Instance.Port))
     {
         return;
     }
     SysCons.LogInfo("AuthServer is listening on {0}:{1}...", AuthConfig.Instance.BindIP, AuthConfig.Instance.Port);
 }
Ejemplo n.º 14
0
 private void AuthServ_OnConnect(object sender, ClientEventArgs e)
 {
     SysCons.LogInfo("Client connected: {0}", e.Client.ToString());
     e.Client.User = new AuthClient(e.Client);
     byte[] rawData = { 0x06, 0x00, 0x03, 0x00, 0x30, 0x2C, 0x67, 0x4C };
     if (e.Client.IsConnected)
     {
         e.Client.Send(rawData);
     }
 }
Ejemplo n.º 15
0
        internal void AuthKeyForCommunityServer(byte[] data)
        {
            //GU_AUTH_KEY_FOR_COMMUNITY_SERVER_RES
            SysCons.LogInfo("GU_AUTH_KEY_FOR_COMMUNITY_SERVER_RES");
            GU_AUTH_KEY_FOR_COMMUNITY_SERVER_RES oPkt = new GU_AUTH_KEY_FOR_COMMUNITY_SERVER_RES();

            oPkt.ResultCode = 500;
            oPkt.AuthKey    = Encoding.ASCII.GetBytes("SE@WASDE#$RFWD@D");
            oPkt.BuildPacket();
            this.Client.Send(oPkt.Data);
        }
Ejemplo n.º 16
0
 private static void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e)
 {
     if (e.IsTerminating)
     {
         SysCons.LogError("Terminating because of unhandled exception.");
     }
     else
     {
         SysCons.LogError("Caught unhandled exception.");
     }
     Console.ReadLine();
 }
Ejemplo n.º 17
0
        public void SendLoginResponse(byte[] data)
        {
            UC_LOGIN_REQ iPkt = new UC_LOGIN_REQ();

            iPkt.SetData(data);
            SysCons.LogInfo("UC_LOGIN_REQ AccountID({0}) LastServerID({1})", iPkt.AccountID, iPkt.ServerID);

            CU_LOGIN_RES oPkt = new CU_LOGIN_RES();

            oPkt.LastServerID = iPkt.ServerID;
            oPkt.BuildPacket();
            this.Client.Send(oPkt.Data);
        }
Ejemplo n.º 18
0
        public static bool StopServer()
        {
            if (Serv == null)
            {
                return(false);
            }

            SysCons.LogInfo("Stopping CharServer..");
            Serv.Shutdown();
            LobbyServerThread.Abort();
            Serv = null;

            return(true);
        }
Ejemplo n.º 19
0
        public static bool StopAuth()
        {
            if (AuthServ == null)
            {
                return(false);
            }

            SysCons.LogInfo("Stopping AuthServer..");
            AuthServ.Shutdown();
            AuthServThread.Abort();
            AuthServ = null;

            return(true);
        }
Ejemplo n.º 20
0
        int load(string rdf_file, uint record_size)
        {
            byte padding;

            char[]       record;
            int          ret;
            uint         data_size;
            BinaryReader f = new BinaryReader(File.Open(rdf_file, FileMode.Open));

            if (f == null)
            {
                return(-1);
            }


            /* Read file header information then ignore it*/
            f.ReadByte();
            f.ReadInt32();
            f.ReadByte();

            record = new char[record_size - 1];
            /* Wrote custom memset method to handle 0ing out records */
            Helpers.Util.Memset(record, 0, record_size);

            /* This loops through the file reading a record into memory */
            while (f.BaseStream.Position != f.BaseStream.Length)
            {
                int n = (int)record_size;
                ret = f.Read(record, 0, n);

                if (ret == 1)
                {
                    // Havee to write the on_record function as an abstract in the base class.
                    //if (on_record(record, (uint)ret) != 0)
                    //{
                    return(-1);
                    //}
                }
                else if (f.BaseStream.Position != f.BaseStream.Length)
                {
                    SysCons.LogError("%s: error loading [%s]: read %d vs %d\n", System.Reflection.MethodBase.GetCurrentMethod().Name, rdf_file, record_size, ret);
                    return(-1);
                }
            }

            record = null;
            f      = null;

            return(0);
        }
Ejemplo n.º 21
0
        internal void SendWaitCheck(byte[] data)
        {
            UC_CONNECT_WAIT_CHECK_REQ iPkt = new UC_CONNECT_WAIT_CHECK_REQ();

            iPkt.SetData(data);
            SysCons.LogInfo("UC_CONNECT_WAIT_CHECK_REQ ServerChannelIndex({0})", iPkt.byServerChannelIndex);
            CU_CONNECT_WAIT_CHECK_RES oPkt = new CU_CONNECT_WAIT_CHECK_RES();

            oPkt.BuildPacket();
            this.Client.Send(oPkt.Data);
            CU_CONNECT_WAIT_COUNT_NFY o2Pkt = new CU_CONNECT_WAIT_COUNT_NFY();

            o2Pkt.BuildPacket();
            this.Client.Send(o2Pkt.Data);
        }
Ejemplo n.º 22
0
        public void SendDisconnect(byte[] data)
        {
            var iPkt = new UC_CHARACTER_EXIT_REQ();

            iPkt.SetData(data);

            SysCons.LogInfo("UC_CHARACTER_EXIT_REQ IsGameMove({0})", iPkt.IsGameMove);

            using (var oPkt = new CU_CHARACTER_EXIT_RES())
            {
                oPkt.ResultCode = (ushort)ResultCodes.CHARACTER_SUCCESS;
                oPkt.BuildPacket();
                Client.Send(oPkt.Data);
            }
        }
Ejemplo n.º 23
0
        public void SendConnectWaitCancelResult(byte[] data)
        {
            var iPkt = new UC_CONNECT_WAIT_CANCEL_REQ();

            iPkt.SetData(data);
            SysCons.LogInfo("UC_CONNECT_WAIT_CANCEL_REQ ChannelID({0})", iPkt.ChannelID);

            ChannelID = iPkt.ChannelID;

            using (var oPkt = new CU_CONNECT_WAIT_CANCEL_RES())
            {
                oPkt.ResultCode = (ushort)ResultCodes.CHARACTER_SUCCESS;
                oPkt.BuildPacket();
                Client.Send(oPkt.Data);
            }
        }
Ejemplo n.º 24
0
        internal void SendCharacterSelect(byte[] data)
        {
            UC_CHARACTER_SELECT_REQ iPkt = new UC_CHARACTER_SELECT_REQ();

            iPkt.SetData(data);
            SysCons.LogInfo("UC_CHARACTER_SELECT_REQ charId({0}) ServerChannelIndex({1})", iPkt.charId, iPkt.byServerChannelIndex);

            CU_CHARACTER_SELECT_RES sPkt = new CU_CHARACTER_SELECT_RES();

            sPkt.szGameServerIP           = Encoding.ASCII.GetBytes("127.0.0.1");
            sPkt.wGameServerPortForClient = 50400;
            SysCons.LogInfo("CU_CHARACTER_SELECT_RES IPAddress({0}) Port({1})", sPkt.szGameServerIP, sPkt.wGameServerPortForClient);
            sPkt.AuthKey    = Encoding.ASCII.GetBytes("SE@WASDE#$RFWD@D");
            sPkt.ResultCode = 200;
            // connecting to GameServer
            sPkt.BuildPacket();
            this.Client.Send(sPkt.Data);
        }
Ejemplo n.º 25
0
        public void SendCharacterCreate(byte[] data)
        {
            var iPkt = new UC_CHARACTER_ADD_REQ();

            iPkt.SetData(data);
            SysCons.LogInfo(
                "UC_CHARACTER_ADD_REQ Name({0}) Race({1}) Class({2}) Gender({3}) Face({4}) Hair({5}) HairColor({6}) SkinColor({7}) Blood({8})",
                iPkt.Name,
                ((CharRaces)iPkt.Race).ToString(),
                ((CharClasses)iPkt.Class).ToString(),
                ((CharGenders)iPkt.Gender).ToString(),
                iPkt.Face,
                iPkt.Hair,
                iPkt.HairColor,
                iPkt.SkinColor,
                iPkt.Blood
                );
        }
Ejemplo n.º 26
0
        public void SendLoginResponse(byte[] data)
        {
            var iPkt = new UC_LOGIN_REQ();

            iPkt.SetData(data);
            SysCons.LogInfo("UC_LOGIN_REQ AuthKey({0}) AccountID({1}) LastServerID({2})", iPkt.AuthKey, iPkt.AccountID, iPkt.ServerID);

            AccountID = iPkt.AccountID;
            ServerID  = iPkt.ServerID;
            AuthKey   = iPkt.AuthKey;

            using (var oPkt = new CU_LOGIN_RES())
            {
                oPkt.LastServerID = ServerID;
                oPkt.BuildPacket();
                Client.Send(oPkt.Data);
            }
        }
Ejemplo n.º 27
0
        public virtual bool Listen(string bindIP, int port)
        {
            // Check if the server has been disposed.
            if (_disposed)
            {
                throw new ObjectDisposedException(this.GetType().Name, "Server has been disposed.");
            }

            // Check if the server is already listening.
            if (IsListening)
            {
                throw new InvalidOperationException("Server is already listening.");
            }

            // Create new TCP socket and set socket options.
            Listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            // Setup our options:
            // * NoDelay - don't use packet coalescing
            // * DontLinger - don't keep sockets around once they've been disconnected
            Listener.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.NoDelay, true);
            Listener.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.DontLinger, true);

            try
            {
                // Bind.
                Listener.Bind(new IPEndPoint(IPAddress.Parse(bindIP), port));
                this.Port = port;
            }
            catch (SocketException)
            {
                SysCons.LogError(string.Format("{0} can't bind on {1}, server shutting down..", this.GetType().Name, bindIP));
                this.Shutdown();
                return(false);
            }

            // Start listening for incoming connections.
            Listener.Listen(10);
            IsListening = true;

            // Begin accepting any incoming connections asynchronously.
            Listener.BeginAccept(AcceptCallback, null);
            return(true);
        }
Ejemplo n.º 28
0
        public void SendCharacterSelectResult(byte[] data)
        {
            var iPkt = new UC_CHARACTER_SELECT_REQ();

            iPkt.SetData(data);
            SysCons.LogInfo("UC_CHARACTER_SELECT_REQ ServerID({0}) CharID({1})", iPkt.ServerID, iPkt.CharID);
            ServerID = iPkt.ServerID;
            CharID   = iPkt.CharID;

            using (var oPkt = new CU_CHARACTER_SELECT_RES())
            {
                oPkt.ResultCode     = (ushort)ResultCodes.CHARACTER_SUCCESS;
                oPkt.CharID         = CharID;
                oPkt.AuthKey        = AuthKey;
                oPkt.GameServerIP   = CharConfig.Instance.GetGameServerIP(ServerID, ChannelID);
                oPkt.GameServerPort = CharConfig.Instance.GetGameServerPort(ServerID, ChannelID);
                oPkt.BuildPacket();
                Client.Send(oPkt.Data);
            }
        }
Ejemplo n.º 29
0
        private void ReceiveCallback(IAsyncResult result)
        {
            Client client = result.AsyncState as Client; // Get the connection connection passed to the callback.

            if (client == null)
            {
                return;
            }

            try
            {
                int bytesRecv = client.EndReceive(result); // Finish receiving data from the socket.

                if (bytesRecv > 0)
                {
                    OnDataReceived(new ClientDataEventArgs(client, client.RecvBuffer)); // Raise the DataReceived event.

                    if (client.IsConnected)
                    {
                        client.BeginReceive(ReceiveCallback, client);                     // Begin receiving again on the socket, if it is connected.
                    }
                    else
                    {
                        RemoveClient(client, true);  // else remove it from connection list.
                    }
                }
                else
                {
                    RemoveClient(client, true);  // Connection was lost.
                }
            }
            catch (SocketException)
            {
                RemoveClient(client, true); // An error occured while receiving, connection has disconnected.
            }
            catch (Exception e)
            {
                SysCons.LogError("ReceiveCallback: {0}", e);
            }
        }
Ejemplo n.º 30
0
        internal void SendCharacterAdd(byte[] data)
        {
            //TO DO UC_CHARACTER_ADD_REQ
            SysCons.LogInfo("UC_CHARACTER_ADD_REQ");
            UC_CHARACTER_ADD_REQ iPkt = new UC_CHARACTER_ADD_REQ();

            iPkt.SetData(data);
            SysCons.LogInfo(
                "UC_CHARACTER_ADD_REQ Name({0}) Race({1}) Class({2}) Gender({3}) Face({4}) Hair({5}) HairColor({6}) SkinColor({7}) Blood({8})",
                iPkt.Name,
                ((CharRaces)iPkt.Race).ToString(),
                ((CharClasses)iPkt.Class).ToString(),
                ((CharGenders)iPkt.Gender).ToString(),
                iPkt.Face,
                iPkt.Hair,
                iPkt.HairColor,
                iPkt.SkinColor,
                iPkt.Blood
                );
            //dlaczego wczesniej bylo var ?
            CU_CHARACTER_ADD_RES oPkt = new CU_CHARACTER_ADD_RES();

            oPkt.ResultCode = (ushort)CharDB.InsertCharacter(this.AccountID, this.ServerID, iPkt.Name, iPkt.Race, iPkt.Class,
                                                             iPkt.Gender, iPkt.Face, iPkt.Hair, iPkt.HairColor, iPkt.SkinColor);
            oPkt.charID      = 1;
            oPkt.Name        = iPkt.Name;
            oPkt.Race        = iPkt.Race;
            oPkt.Class       = iPkt.Class;
            oPkt.Gender      = iPkt.Gender;
            oPkt.Face        = iPkt.Face;
            oPkt.Hair        = iPkt.Hair;
            oPkt.Gender      = iPkt.Gender;
            oPkt.HairColor   = iPkt.HairColor;
            oPkt.SkinColor   = iPkt.SkinColor;
            oPkt.worldTblidx = 1;
            oPkt.worldId     = 1;
            oPkt.BuildPacket();
            this.Client.Send(oPkt.Data);
        }