コード例 #1
0
ファイル: Program.cs プロジェクト: Avatarchik/UnityMMO
        static void Main(string[] args)
        {
            Console.WriteLine("-----MMO World Server-----");
            Console.WriteLine("Checking DB connection");
            Database db             = new Database();
            string   databaseStatus = db.CheckDbConnection();

            if (databaseStatus == "OK")
            {
                Console.WriteLine("Connected to DB.");
                WorldServer server      = new WorldServer();
                bool        startServer = server.StartServer();
                while (startServer)
                {
                    string input = Console.ReadLine();
                    //TODO: allow for commands to be entered into the server here
                }
                //Thread.Sleep(10000);
            }
            else
            {
                Console.WriteLine("FAILED. Could not connect to MYSQL DB.");
                Console.WriteLine("Please press any key to continue...");
                Console.ReadKey();
            }
        }
コード例 #2
0
        private void ProcessGenericPackets(List <SubPacket> subPackets)
        {
            foreach (SubPacket subPacket in subPackets)
            {
                subPacket.debugPrintSubPacket();
                Console.WriteLine(subPacket.gameMessage.opcode);
                switch (subPacket.gameMessage.opcode)
                {
                //contact login server and ensure that ipaddress of player is currently connected to

                case ((ushort)GamePacketOpCode.Handshake):
                    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    try
                    {
                        IPAddress[] ip          = Dns.GetHostAddresses(LOGIN_SERVER_IP);
                        int         characterId = BitConverter.ToInt32(subPacket.data, 0);
                        client.CharacterId         = characterId;
                        client.WorldServerToClient = true;
                        IPEndPoint remoteEP = new IPEndPoint(ip[0], LOGIN_SERVER_PORT);
                        socket.Connect(remoteEP);
                        HandshakePacket packet = new HandshakePacket(client.GetIp(), client.GetPort(), characterId);
                        //Console.WriteLine("PORT FROM CLIENT:" + client.GetPort());
                        //Console.WriteLine("IP FROM CLIENT:" + client.GetIp());
                        //Console.WriteLine("CHARACTER ID FROM CLIENT: " + client.CharacterId);
                        SubPacket             sp           = new SubPacket(GamePacketOpCode.Handshake, 0, 0, packet.GetBytes(), SubPacketTypes.GamePacket);
                        BasePacket            packetToSend = BasePacket.CreatePacket(sp, true, false);
                        WorldClientConnection loginServer  = new WorldClientConnection();
                        loginServer.socket = socket;
                        loginServer.QueuePacket(packetToSend);
                        loginServer.FlushQueuedSendPackets();
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e);
                    }
                    break;


                case (((ushort)GamePacketOpCode.Acknowledgement)):

                    AcknowledgePacket ack = new AcknowledgePacket(subPacket.data);
                    if (ack.AckSuccessful)
                    {
                        foreach (var mClient in WorldServer.GetClientConnections())     //check this if any performance issues
                        {
                            Console.WriteLine(ack.CharacterId);
                            if (mClient.CharacterId == ack.CharacterId && mClient.WorldServerToClient) //this is getting the wrong client
                            {                                                                          //maybe set a boolean in clientconnection that tells whether or not client is created from a server to server communication
                                ConnectedPlayer connectedPlayer = new ConnectedPlayer(ack.CharacterId);
                                connectedPlayer.ClientAddress = ack.ClientAddress;
                                WorldServer.mConnectedPlayerList.Add(connectedPlayer.actorId, connectedPlayer);
                                client = mClient;
                                SubPacket sp = new SubPacket(GamePacketOpCode.Acknowledgement, 0, 0, subPacket.data, SubPacketTypes.GamePacket);
                                client.QueuePacket(BasePacket.CreatePacket(sp, true, false));
                                client.FlushQueuedSendPackets();
                                Console.WriteLine("Sending ack back to: " + client.GetFullAddress());
                                break;
                            }
                        }
                    }

                    break;



                //if everything okay


                default:
                    break;
                }
            }
        }
コード例 #3
0
 public WorldServer()
 {
     mSelf = this;
 }