コード例 #1
0
void PackManager::Dispatch()
{
	if (m_socketserver == nullptr)
	{
		fprintf(stderr, "socketserver ptr is null.");
		return;
	}

	RingBuffer ringbuffer = m_socketserver->GetRecvBuffer();
	if (ringbuffer.IsComplete())
	{
		long sz = ringbuffer.GetSize();
		if (sz != ringbuffer.Read(m_readbuffer, sz))
		{
			fprintf(stderr, "ringbuffer read data error.");
			return;
		}

		unsigned int version = PVERSION(m_readbuffer);
		unsigned int opcode = POPCODE(m_readbuffer);

		//google::protobuf::Message* pMessage = MessageFactory::CreateMessage(opcode);
		//pMessage->SerializeToArray(m_readbuffer, sz - HEADSIZE);
	}
}
コード例 #2
0
ファイル: gfx_inf.c プロジェクト: thefkboss/dm500-satip
static int __init gfx_inf_init(void)
{
    int rtn = gfx_inf_h_init(GFX_MAX_ALLOWED_SURFACES);

    // print the driver verision info for futher reference
    PVERSION(GFX_DRIVER_NAME);

    if(rtn < 0) 
    {
        PFATALE("GFX: Failed to initialize device!\n"); 
        return -1;
    }

    if (devfs_register_chrdev(GFX_DEV_MAJOR, GFX_DRIVER_NAME, &GfxFops) < 0)
    {
        gfx_inf_h_deinit(2);
        PFATALE("GFX: Failed to register device!\n"); 
        return -1;
    }

    devfs_handle = devfs_find_handle(NULL, "stbgfx",
                                0, 0, DEVFS_SPECIAL_CHR,0);
    
    if(devfs_handle == NULL)
    {
      
      devfs_handle = devfs_register(NULL, "stbgfx", DEVFS_FL_DEFAULT,
                                GFX_DEV_MAJOR, 0,
                                S_IFCHR | S_IRUSR | S_IWUSR,
                                &GfxFops, NULL);
    }
    else
      devfs_handle = NULL;
      
    /*
     *  Initialize the dma module -- BJC 102102
     */    
    if(gfx_atom_init() != 0) {
        PFATALE("GFX: Failed to initialize graphics atom!\n");
    }
    return 0;
}
コード例 #3
0
void SocketInterface::Update()
{
	RingBuffer& ringbuffer = m_socketserver.GetRecvBuffer();
	if (ringbuffer.IsComplete() && ringbuffer.GetSize() > 0)
	{
		long sz = ringbuffer.GetSize();
		if (sz == 0)
		{
			return;
		}
		if ((sz+2) != ringbuffer.Read(m_readbuffer, sz+2))
		{
			fprintf(stderr, "ringbuffer read data error.");
			return;
		}

		unsigned int version = PVERSION(m_readbuffer);
		unsigned int opcode = POPCODE(m_readbuffer);
		//opcode = 1;

		google::protobuf::Message* pMessage = MessageFactory::getInstance()->CreateMessage(opcode);
		if (pMessage == nullptr)
		{
			//CCLOG("illegal opcode:[%u].", opcode);
			return;
		}
		pMessage->ParseFromArray(m_readbuffer + 8, sz - 6);
		/*
		if (opcode == 1)
		{
			CMessageLoginInfoResponse* roleResponse = (CMessageLoginInfoResponse*)pMessage;
			std::string ver = roleResponse->version();
			std::string name = roleResponse->name();
			std::string ip = roleResponse->ip();
			unsigned int port = roleResponse->port();
			unsigned int serial = roleResponse->serial();
			CCLOG("Login Server Info: version = %s, name = %s, ip = %s, port = %u, serial = %u", ver.c_str(), name.c_str(), ip.c_str(), port, serial);
		}
		else if (opcode == 3)
		{
			CMessageLoginServerResponse* serverResponse = (CMessageLoginServerResponse*)pMessage;
			for (int i = 0; i < serverResponse->lists_size(); i++)
			{
				const CMessageLoginServerResponse_ServerList& roleResponse = serverResponse->lists(i);
				std::string ver = "aass";
				std::string name = roleResponse.name();
				std::string ip = roleResponse.ip();
				unsigned int port = roleResponse.port();
				unsigned int serial = roleResponse.serial();
				CCLOG("Login Server Info: version = %s, name = %s, ip = %s, port = %u, serial = %u", ver.c_str(), name.c_str(), ip.c_str(), port, serial);
			}
		}
		*/
		int index = MessageFactory::getInstance()->GetFuncIndex(opcode);
		if (index < 0 || index >= MessageFactory::MESSAGE_NUM)
		{
			//CCLOG("update event:[%u] failed.", opcode);
			return;
		}
		else
		{
			if (m_WaitMsg.state != 0 && m_WaitMsg.recvOp == opcode)
			{
				if (m_WaitMsg.waitTime != 0)
				{
					//通知正在连接状态结束
					m_waitCallBackList[m_waitId].waitCallBack(1, m_WaitMsg.sendOp, m_WaitMsg.recvOp);
					//size_t size = m_waitCallBackList.size();
					//if (size > 0)
					//{
					//	if (size > 1)
					//		CCLOG("m_waitCallBackList num > 1");
					//}
				}
				m_WaitMsg.state = 0;
				m_WaitMsg.sendOp = 0;
				m_WaitMsg.recvOp = 0;
				m_WaitMsg.delay = 0;
				m_WaitMsg.sendTime = 0;
				m_WaitMsg.waitTime = 0;
				m_WaitMsg.length = 0;
			}
			if (m_events[index])
			{
				m_events[index](opcode, pMessage);
			}
			else
			{
				//Property::getInstance()->OnMessage(opcode, pMessage);
			}
			//CCLOG("register event:[%u] success.", opcode);
			return;
		}

		/*
		std::map<unsigned int, std::function<int(google::protobuf::Message*)>>::const_iterator iter = m_events.find(opcode);
		if (iter != m_events.end())
		{
			iter->second(pMessage);
		}
		else
		{
			CCLOG("illegal opcode:[%u].", opcode);
		}
		*/
	}
	if (m_WaitMsg.state != 0)
	{
		if (m_WaitMsg.sendTime != 0 && GetMillisecondNow() - m_WaitMsg.sendTime > m_WaitMsg.delay)
		{
			m_WaitMsg.sendTime = 0;
			m_WaitMsg.waitTime = GetMillisecondNow();
			//通知正在连接中
			m_waitCallBackList[m_waitId].waitCallBack(2, m_WaitMsg.sendOp, m_WaitMsg.recvOp);
			//size_t size = m_waitCallBackList.size();
			//if (size > 0)
			//{
			//	if (size > 1)
			//		CCLOG("m_waitCallBackList num > 1");
			//}
		}
		else if (m_WaitMsg.waitTime != 0 && GetMillisecondNow() - m_WaitMsg.waitTime > WAIT_TIME_OUT)
		{
			m_WaitMsg.waitTime = 0;
			//通知连接失败
			m_waitCallBackList[m_waitId].waitCallBack(3, m_WaitMsg.sendOp, m_WaitMsg.recvOp);
			//size_t size = m_waitCallBackList.size();
			//if (size > 0)
			//{
			//	if (size > 1)
			//		CCLOG("m_waitCallBackList num > 1");
			//}
		}
	}
}