private bool versionExchangeSwitch = false; // false -> From server to client, true -> From client to server

        #endregion Fields

        #region Constructors

        public Client(TCPSocket sock)
        {
            Log.Info("Client", "Creating new connection to EVEmu Server");
            connection = new TCPSocket(26000, false);

            if (connection.Connect("mmoemulators.com") == false)
            {
                Log.Error("Client", "Cannot connect to EVEmu Server on port 25999");
                CloseConnection();
                return;
            }

            clientPacketizer = new StreamPacketizer();
            serverPacketizer = new StreamPacketizer();
            socket = sock;

            serverReceive = new AsyncCallback(ServerAsyncReceive);
            clientReceive = new AsyncCallback(ClientAsyncReceive);

            // Give time to the socket
            Thread.Sleep(2000);

            AsyncState serverState = new AsyncState();
            connection.Socket.BeginReceive(serverState.buffer, 0, 8192, SocketFlags.None, serverReceive, serverState);

            AsyncState clientState = new AsyncState();
            socket.Socket.BeginReceive(clientState.buffer, 0, 8192, SocketFlags.None, clientReceive, clientState);
        }
예제 #2
0
        public void ServerAsyncReceive(IAsyncResult ar)
        {
            try
            {
                AsyncState state = (AsyncState)(ar.AsyncState);

                byte[] serverData  = state.buffer;
                int    serverBytes = 0;

                serverBytes = connection.Socket.EndReceive(ar);

                if (serverBytes > 0)
                {
                    // Add the packets
                    serverPacketizer.QueuePackets(serverData, serverBytes);

                    int packets = serverPacketizer.ProcessPackets();

                    for (int i = 0; i < packets; i++)
                    {
                        byte[] packet = serverPacketizer.PopItem();

                        PyObject data = Unmarshal.Process <PyObject>(packet);

                        Log.Warning("PacketTracer::Server", PrettyPrinter.Print(data));

                        data = OldHandle(data);

                        SendClient(data);
                    }
                }

                connection.Socket.BeginReceive(state.buffer, 0, 8192, SocketFlags.None, serverReceive, state);
            }
            catch (Exception ex)
            {
                Log.Error("ExceptionHandler", ex.ToString());
                CloseConnection();
            }
        }
예제 #3
0
        private void ClientAsyncReceive(IAsyncResult ar)
        {
            try
            {
                AsyncState state = (AsyncState)(ar.AsyncState);

                byte[] clientData  = state.buffer;
                int    clientBytes = 0;

                clientBytes = socket.Socket.EndReceive(ar);

                if (clientBytes > 0)
                {
                    clientPacketizer.QueuePackets(clientData, clientBytes);

                    int packets = clientPacketizer.ProcessPackets();

                    for (int i = 0; i < packets; i++)
                    {
                        byte[] packet = clientPacketizer.PopItem();

                        PyObject data = Unmarshal.Process <PyObject>(packet);

                        Log.Warning("PacketTracer::Client", PrettyPrinter.Print(data));

                        data = OldHandle(data);

                        SendServer(data);
                    }
                }

                socket.Socket.BeginReceive(state.buffer, 0, 8192, SocketFlags.None, clientReceive, state);
            }
            catch (Exception ex)
            {
                Log.Error("ExceptionHandler", ex.ToString());
                CloseConnection();
            }
        }