示例#1
0
void
SecureSocket::secureAccept()
{
	setJob(new TSocketMultiplexerMethodJob<SecureSocket>(
			this, &SecureSocket::serviceAccept,
			getSocket(), isReadable(), isWritable()));
}
示例#2
0
void
CTCPSocket::shutdownOutput()
{
	bool useNewJob = false;
	{
		CLock lock(&m_mutex);

		// shutdown socket for writing
		try {
			ARCH->closeSocketForWrite(m_socket);
		}
		catch (XArchNetwork&) {
			// ignore
		}

		// shutdown buffer for writing
		if (m_writable) {
			sendEvent(getOutputShutdownEvent());
			onOutputShutdown();
			useNewJob = true;
		}
	}
	if (useNewJob) {
		setJob(newJob());
	}
}
示例#3
0
void
CTCPSocket::close()
{
	// remove ourself from the multiplexer
	setJob(NULL);

	CLock lock(&m_mutex);

	// clear buffers and enter disconnected state
	if (m_connected) {
		sendEvent(getDisconnectedEvent());
	}
	onDisconnected();

	// close the socket
	if (m_socket != NULL) {
		CArchSocket socket = m_socket;
		m_socket = NULL;
		try {
			ARCH->closeSocket(socket);
		}
		catch (XArchNetwork& e) {
			// ignore, there's not much we can do
			LOG((CLOG_WARN "error closing socket: %s", e.what().c_str()));
		}
	}
}
示例#4
0
void
CTCPSocket::connect(const CNetworkAddress& addr)
{
	{
		CLock lock(&m_mutex);

		// fail on attempts to reconnect
		if (m_socket == NULL || m_connected) {
			sendConnectionFailedEvent("busy");
			return;
		}

		try {
			if (ARCH->connectSocket(m_socket, addr.getAddress())) {
				sendEvent(getConnectedEvent());
				onConnected();
			}
			else {
				// connection is in progress
				m_writable = true;
			}
		}
		catch (XArchNetwork& e) {
			throw XSocketConnect(e.what());
		}
	}
	setJob(newJob());
}
示例#5
0
void
CTCPSocket::shutdownInput()
{
	bool useNewJob = false;
	{
		CLock lock(&m_mutex);

		// shutdown socket for reading
		try {
			ARCH->closeSocketForRead(m_socket);
		}
		catch (XArchNetwork&) {
			// ignore
		}

		// shutdown buffer for reading
		if (m_readable) {
			sendEvent(m_events->forIStream().inputShutdown());
			onInputShutdown();
			useNewJob = true;
		}
	}
	if (useNewJob) {
		setJob(newJob());
	}
}
示例#6
0
void
CTCPSocket::write(const void* buffer, UInt32 n)
{
	bool wasEmpty;
	{
		CLock lock(&m_mutex);

		// must not have shutdown output
		if (!m_writable) {
			sendEvent(getOutputErrorEvent());
			return;
		}

		// ignore empty writes
		if (n == 0) {
			return;
		}

		// copy data to the output buffer
		wasEmpty = (m_outputBuffer.getSize() == 0);
		m_outputBuffer.write(buffer, n);

		// there's data to write
		m_flushed = false;
	}

	// make sure we're waiting to write
	if (wasEmpty) {
		setJob(newJob());
	}
}
示例#7
0
void
TCPSocket::close()
{
    // remove ourself from the multiplexer
    setJob(nullptr);

    Lock lock(&m_mutex);

    // clear buffers and enter disconnected state
    if (m_connected) {
        sendEvent(m_events->forISocket().disconnected());
    }
    onDisconnected();

    // close the socket
    if (m_socket != nullptr) {
        ArchSocket socket = m_socket;
        m_socket = nullptr;
        try {
            ARCH->closeSocket(socket);
        }
        catch (XArchNetwork& e) {
            // ignore, there's not much we can do
            LOG((CLOG_WARN "error closing socket: %s", e.what()));
        }
    }
}
示例#8
0
void Network::onJob(Client *client, const Job &job)
{
    if (m_donate && m_donate->isActive() && client->id() != -1) {
        return;
    }

    setJob(client, job);
}
示例#9
0
void KonqRun::handleError(KJob *job)
{
    if (!m_mailto.isEmpty()) {
        setJob(0);
        setFinished(true);
        return;
    }
    KParts::BrowserRun::handleError(job);
}
示例#10
0
CTCPSocket::CTCPSocket(CArchSocket socket) :
	m_mutex(),
	m_socket(socket),
	m_flushed(&m_mutex, true)
{
	assert(m_socket != NULL);

	// socket starts in connected state
	init();
	onConnected();
	setJob(newJob());
}
示例#11
0
TCPSocket::TCPSocket(IEventQueue* events, SocketMultiplexer* socketMultiplexer, ArchSocket socket) :
    IDataSocket(events),
    m_events(events),
    m_socket(socket),
    m_flushed(&m_mutex, true),
    m_socketMultiplexer(socketMultiplexer)
{
    assert(m_socket != NULL);

    // socket starts in connected state
    init();
    onConnected();
    setJob(newJob());
}
示例#12
0
文件: looper.cpp 项目: armsvb/looper
//restart a specific job
uint8_t looper::restartJob(void (*userJob)(void)) {
    return (setJob(userJob, 1));
}
示例#13
0
文件: looper.cpp 项目: armsvb/looper
//pause a specific job
uint8_t looper::pauseJob(void (*userJob)(void)) {
    return (setJob(userJob, 0));
}            
示例#14
0
void player::chooseJob(WINDOW*& interfaceWindow, std::vector<career>& careerList, bool userOrNot)
{
    int interfacePrintX = 77;
    int interfacePrintY = 5;

    mvwprintw(interfaceWindow, interfacePrintY-2, interfacePrintX, "                                            ");
    mvwprintw(interfaceWindow, interfacePrintY-1, interfacePrintX, "                                            ");
    mvwprintw(interfaceWindow, interfacePrintY, interfacePrintX, "                                            ");
    mvwprintw(interfaceWindow, interfacePrintY+1, interfacePrintX, "                                            ");
    wrefresh(interfaceWindow);

    bool loopFinish = false;

    career jobOne;
    career jobTwo;
    career jobThree;

    int randomOne;
    int randomTwo;
    int randomThree;

    while(loopFinish != true)
    {
        randomOne = rand() % careerList.size();
        randomTwo = rand() % careerList.size();
        randomThree = rand() % careerList.size();
        if(randomOne == randomTwo || randomTwo == randomThree || randomOne == randomThree)
        {
            loopFinish = false;
        }
        else
        {
            loopFinish = true;
        }
    }

    jobOne = careerList.at(randomOne);
    jobTwo = careerList.at(randomTwo);
    jobThree = careerList.at(randomThree);

    if(userOrNot == true)
    {
        mvwprintw(interfaceWindow, interfacePrintY-2, interfacePrintX, "Choose a Career: ");

        mvwprintw(interfaceWindow, interfacePrintY-1, interfacePrintX, "(1) ");
        mvwprintw(interfaceWindow, interfacePrintY-1, interfacePrintX+4, jobOne.title.c_str());
        mvwprintw(interfaceWindow, interfacePrintY-1, interfacePrintX+22, "Salary: $");
        mvwprintw(interfaceWindow, interfacePrintY-1, interfacePrintX+31, "%d", jobOne.salary);

        mvwprintw(interfaceWindow, interfacePrintY, interfacePrintX, "(2) ");
        mvwprintw(interfaceWindow, interfacePrintY, interfacePrintX+4, jobTwo.title.c_str());
        mvwprintw(interfaceWindow, interfacePrintY, interfacePrintX+22, "Salary: $");
        mvwprintw(interfaceWindow, interfacePrintY, interfacePrintX+31, "%d", jobTwo.salary);

        mvwprintw(interfaceWindow, interfacePrintY+1, interfacePrintX, "(3) ");
        mvwprintw(interfaceWindow, interfacePrintY+1, interfacePrintX+4, jobThree.title.c_str());
        mvwprintw(interfaceWindow, interfacePrintY+1, interfacePrintX+22, "Salary: $");
        mvwprintw(interfaceWindow, interfacePrintY+1, interfacePrintX+31, "%d", jobThree.salary);

        wrefresh(interfaceWindow);

        bool goodInput = false;

        while(goodInput != true)
        {
            char jobDecision = getch();
            if(jobDecision == '1' || jobDecision == '2' || jobDecision == '3')
            {
                goodInput = true;

                if(jobDecision == '1')
                {
                    setJob(jobOne);
                    careerList.erase(careerList.begin() + randomOne);
                }
                else if(jobDecision == '2')
                {
                    setJob(jobTwo);
                    careerList.erase(careerList.begin() + randomTwo);
                }
                else if(jobDecision == '3')
                {
                    setJob(jobThree);
                    careerList.erase(careerList.begin() + randomThree);
                }
            }
            else
            {
                goodInput = false;
            }
        }
    }

    else if(userOrNot == false)
    {
        int randChoice = rand() % 3;

        if(randChoice == 0)
        {
            setJob(jobOne);
            careerList.erase(careerList.begin() + randomOne);
        }

        else if(randChoice == 1)
        {
            setJob(jobTwo);
            careerList.erase(careerList.begin() + randomTwo);
        }

        else if(randChoice == 2)
        {
            setJob(jobThree);
            careerList.erase(careerList.begin() + randomThree);
        }
    }



    mvwprintw(interfaceWindow, interfacePrintY-2, interfacePrintX, "                                            ");
    mvwprintw(interfaceWindow, interfacePrintY-1, interfacePrintX, "                                            ");
    mvwprintw(interfaceWindow, interfacePrintY, interfacePrintX, "                                            ");
    mvwprintw(interfaceWindow, interfacePrintY+1, interfacePrintX, "                                            ");
    wrefresh(interfaceWindow);
}