亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gsdpsession.cpp

?? 《SymbianOSC手機應用開發》源碼
?? CPP
字號:
// gsdpsession.cpp
//
// Copyright (c) 2000-2002 Symbian Ltd.  All rights reserved.

#include "gsdpserver.h"

/*
	CGsdpSession
*/

// construct/destruct

CGsdpSession::CGsdpSession()
	{
	}

void CGsdpSession::ConstructL(CGsdpServer& aServer)
	{
	iGdpProtocol = aServer.GetProtocolL(KGdpLoopbackUid);
	}

CGsdpSession::~CGsdpSession()
	{
	// cancel any receive
	CancelReceive();
	// decrement session count, so server may terminate if no longer needed
	Server()->DecrementSessions();
	}

CGsdpServer* CGsdpSession::Server() const
	/**
	   Return the GSDP server.

	   This deliberately hides the CSharableSession version of this
	   function, to prevent lots of ugly casts around the code.
	*/
	{
	return const_cast<CGsdpServer*>(static_cast<const CGsdpServer*>(CSharableSession::Server()));
	}

// service dispatcher - from CSharableSession

void CGsdpSession::ServiceL(const RMessage& aMessage)
	{
	switch (aMessage.Function())
		{
	case EGsdpReqCountProtocols: // return TInt
		aMessage.Complete(Server()->CountProtocols());
		break;
	case EGsdpReqProtocolInfo:   // retrieves protocol info
		GetProtocolInfoL(aMessage.Int0(), aMessage.Ptr1());
		aMessage.Complete(KErrNone);
		break;
	case EGsdpReqSetGameProtocol: // TUint32 aProtocol
		SetGameProtocol(aMessage.Int0());
		aMessage.Complete(KErrNone);
		break;
	case EGsdpReqGetGameProtocol: // returns TUint32
		aMessage.Complete(GetGameProtocol());
		break;
	case EGsdpReqSetGdpProtocol: // RGsdpSession::GdpProtocol aProtocol
		SetGdpProtocolL(TUid::Uid(aMessage.Int0()));
		aMessage.Complete(KErrNone);
		break;
	case EGsdpReqGetGdpProtocol: // returns RGsdpSession::Protocol
		aMessage.Complete(GetGdpProtocol().iUid);
		break;
	case EGsdpReqGdpIsNetworked: // returns TBool
		aMessage.Complete(GdpIsNetworked());
		break;
	case EGsdpReqSetMyPort: // TUint32 aPort
		SetMyPort(aMessage.Int0());
		aMessage.Complete(0);
		break;
	case EGsdpReqGetMyPort: // returns TUint32
		aMessage.Complete(GetMyPort());
		break;
	case EGsdpReqAllocMyNextPort: // returns TUint32
		aMessage.Complete(AllocMyNextPort());
		break;
	case EGsdpReqSetOtherAddress: // const TAny& aAddress
		SetOtherAddress(aMessage.Ptr0());
		aMessage.Complete(0);
		break;
	case EGsdpReqGetOtherAddress: // TAny& aAddress
		GetOtherAddress(aMessage.Ptr0());
		aMessage.Complete(0);
		break;
	case EGsdpReqSetOtherPort: // TUint32 aPort
		SetOtherPort((TUint32) aMessage.Int0());
		aMessage.Complete(0);
		break;
	case EGsdpReqGetOtherPort: // returns TUint32
		aMessage.Complete(GetOtherPort());
		break;
	case EGsdpReqSend: // const TAny& aData
		aMessage.Complete(Send(aMessage.Ptr0()));
		break;
	case EGsdpReqReceiveAll:
		ReceiveAll();
		aMessage.Complete(0);
		break;
	case EGsdpReqReceive: // TAny& aBuffer - async
		Receive(aMessage.Ptr0());
		break;
	case EGsdpReqCancelReceive:
		CancelReceive();
		aMessage.Complete(0);
		break;
	default:
		Server()->PanicClient(EBadRequest);
		};
	}


// client service functions
void CGsdpSession::GetProtocolInfoL(TInt aProto, const TAny* aDes)
	/**
	   Write the protocol information back to the client.
	*/
	{
	TGdpProtocolInfo info;
	TPckg<TGdpProtocolInfo> buf(info);
	Server()->GetProtocolInfoL(aProto, info);
	Message().WriteL(aDes, buf);
	}

void CGsdpSession::SetGdpProtocolL(TUid aProtocol)
	{
	iGdpProtocol = Server()->GetProtocolL(aProtocol);
	}

TUid CGsdpSession::GetGdpProtocol()
	{
	return iGdpProtocol->ProtocolUid();
	}

TBool CGsdpSession::GdpIsNetworked()
	{
	return iGdpProtocol->IsNetworked();
	}

void CGsdpSession::SetGameProtocol(TUint32 aProtocol)
	{
	// set protocol
	iGameProtocol=aProtocol;
	// check whether we can now receive anything
	if (iReceiveActive)
		Server()->iReceiveQueue->CheckPackets(this);
	}

TUint32 CGsdpSession::GetGameProtocol()
	{
	return iGameProtocol;
	}

void CGsdpSession::SetMyPort(TUint32 aPort)
	{
	// set port
	iMyPort=aPort;
	// check whether we can now receive anything
	if (iReceiveActive)
		Server()->iReceiveQueue->CheckPackets(this);
	}

TUint32 CGsdpSession::GetMyPort()
	{
	return iMyPort;
	}

TUint32 CGsdpSession::AllocMyNextPort()
	{
	iMyPort=Server()->MyNextPort();
	return iMyPort;
	}

void CGsdpSession::SetOtherAddress(const TAny* aAddress)
	{
	Message().ReadL(aAddress, iOtherAddress);
	}

void CGsdpSession::GetOtherAddress(const TAny* aAddress)
	{
	Message().WriteL(aAddress, iOtherAddress);
	}

void CGsdpSession::SetOtherPort(TUint32 aPort)
	{
	iOtherPort=aPort;
	}

TUint32 CGsdpSession::GetOtherPort()
	{
	return iOtherPort;
	}

TInt CGsdpSession::Send(const TAny* aData)
	{
	__ASSERT_ALWAYS(iMyPort!=0, Server()->PanicClient(ESendFromZeroPort));
	TBuf8<KMaxGsdpData> buffer;
	Message().ReadL(aData, buffer, 0);
	iGdpProtocol->SendL(iGameProtocol, iMyPort, iOtherAddress, iOtherPort, buffer);
	return 0;
	}

void CGsdpSession::ReceiveAll()
	{
	iGdpProtocol->ReceiveAll();
	}

void CGsdpSession::Receive(const TAny* aBuffer)
	{
	__ASSERT_DEBUG(!iReceiveActive, PanicServer(EReceiveReceiveAlreadyActive));
	// remember receive request
	iReceiveMessage=Message();
	iReceiveBuffer=aBuffer;
	iReceiveActive=ETrue;
	// check for immediate fulfilment
	Server()->iReceiveQueue->CheckPackets(this);
	}

void CGsdpSession::CancelReceive()
	{
	if (!iReceiveActive)
		return;
	iReceiveMessage.Complete(KErrCancel);
	iReceiveActive=EFalse;
	}

// receive queue support

TBool CGsdpSession::CanReceivePacket(const TGsdpPacket& aPacket) const
	{
	return iReceiveActive && (
		iMyPort==aPacket.iToPort && (
			iMyPort!=0 || // in session
			iMyPort==0 && iGameProtocol==aPacket.iGameProtocol // listening
			)
		);
	}

void CGsdpSession::ReceivePacket(TGsdpPacket& aPacket)
	{
	// decide whether to drop or to receive
	TBool drop=EFalse;
	if (aPacket.iGameProtocol!=iGameProtocol)
		drop=ETrue;
	if (iOtherPort!=0 && (aPacket.iAddress!=iOtherAddress || aPacket.iFromPort!=iOtherPort))
		drop=ETrue;
	// get remote's port and address information if we haven't already got it
	if (iOtherPort==0)
		{
		iOtherPort=aPacket.iFromPort;
		iOtherAddress=aPacket.iAddress;
		}
	// receive packet if we should do
	if (!drop)
		{
		iReceiveMessage.WriteL(iReceiveBuffer, aPacket.iData);
		iReceiveMessage.Complete(KErrNone);
		iReceiveActive=EFalse;
		}
	// in any case, tell the receive queue to free the packet for future use
	Server()->iReceiveQueue->FreePacket(aPacket);
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
hitomi一区二区三区精品| 欧美一区二区三区在| 欧美久久久久久久久| 国产亚洲一区二区三区在线观看 | 一区二区三区自拍| 蜜桃传媒麻豆第一区在线观看| 成人黄色在线看| 欧美tickling挠脚心丨vk| 亚洲成人免费看| av电影在线观看一区| 久久免费美女视频| 日韩不卡一区二区| 欧美在线不卡视频| 国产精品免费丝袜| 国产成人在线视频播放| 日韩精品最新网址| 日韩福利电影在线观看| 91福利资源站| 一区二区三区在线免费| av亚洲精华国产精华精华| 日本一区二区三区久久久久久久久不| 久久97超碰国产精品超碰| 欧美裸体bbwbbwbbw| 亚洲午夜国产一区99re久久| 99久久国产综合精品麻豆| 国产精品久久久久久久久久久免费看| 国产精品一二三四| 久久蜜臀中文字幕| 高清不卡一区二区在线| 国产午夜精品一区二区三区嫩草 | www.色综合.com| 中文在线资源观看网站视频免费不卡| 精品一区二区成人精品| 精品国产一区a| 国产又黄又大久久| 国产精品丝袜一区| 99综合影院在线| 日韩美女精品在线| 在线欧美日韩精品| 午夜精品一区二区三区电影天堂 | 国产精品视频一二三区| 国产精品一二一区| 自拍偷拍欧美精品| 欧美午夜在线观看| 日韩精品电影在线| 日韩欧美国产小视频| 国产在线精品免费| 国产精品久久久久久久久果冻传媒| 99久久夜色精品国产网站| 有码一区二区三区| 欧美一区二区视频网站| 国产在线精品一区二区不卡了| 精品国产凹凸成av人导航| 丰满白嫩尤物一区二区| 亚洲精品视频观看| 91精品在线免费| 国产成人精品亚洲日本在线桃色| 中文字幕中文字幕一区二区| 91网址在线看| 日韩avvvv在线播放| 久久九九久久九九| 91久久国产最好的精华液| 蜜桃精品在线观看| 中文字幕亚洲在| 欧美丰满少妇xxxxx高潮对白 | 91影视在线播放| 午夜精品视频一区| 国产视频一区二区在线观看| 91蜜桃在线免费视频| 免费成人美女在线观看.| 欧美国产1区2区| 欧美精品一二三| 成人性视频免费网站| 午夜欧美电影在线观看| 日本一区二区免费在线| 欧美剧情片在线观看| 成人午夜av电影| 日韩电影在线观看网站| 一区二区在线观看视频| 久久久久久免费| 欧美日韩成人激情| 成人福利在线看| 麻豆久久久久久久| 亚洲一二三区不卡| 国产精品传媒入口麻豆| 欧美mv和日韩mv国产网站| 欧美日韩精品一区二区三区四区 | 免费在线观看成人| 亚洲在线一区二区三区| 国产午夜亚洲精品理论片色戒| 91麻豆精品国产91久久久久久久久| 99综合电影在线视频| 国产精品1区二区.| 久久超级碰视频| 男女激情视频一区| 午夜在线成人av| 亚洲精选免费视频| 国产精品国产自产拍高清av| 日韩美女视频在线| 欧美精品xxxxbbbb| 欧美在线观看你懂的| 色哟哟一区二区在线观看| 国产精品羞羞答答xxdd| 激情图区综合网| 麻豆精品一区二区综合av| 亚洲大片免费看| 亚洲一级在线观看| 亚洲一区二区不卡免费| 亚洲一区二区视频在线| 亚洲欧美一区二区不卡| 亚洲精品伦理在线| 亚洲综合在线第一页| 一卡二卡欧美日韩| 亚洲精品国产精品乱码不99| 一区二区三区中文字幕| 亚洲一区二区三区四区在线| 一区二区三区中文字幕精品精品| 日韩美女视频一区| 一区二区三区欧美亚洲| 亚洲图片欧美色图| 婷婷国产v国产偷v亚洲高清| 青椒成人免费视频| 蜜桃av噜噜一区| 国产一区啦啦啦在线观看| 国产成人夜色高潮福利影视| 福利一区二区在线观看| 91视频com| 欧美私模裸体表演在线观看| 欧美精选一区二区| 久久综合久久综合久久| 中文字幕av一区二区三区免费看| 亚洲人成人一区二区在线观看| 亚洲精品免费播放| 午夜激情综合网| 狠狠色丁香久久婷婷综合_中 | 精久久久久久久久久久| 国产河南妇女毛片精品久久久| 丰满亚洲少妇av| 在线免费观看日本一区| 欧美日本一区二区| 久久蜜臀中文字幕| 一区二区三区高清在线| 伦理电影国产精品| 99re视频精品| 欧美一级视频精品观看| 中文字幕不卡一区| 性做久久久久久久免费看| 精品一区二区三区视频 | 国产精品99精品久久免费| 91色婷婷久久久久合中文| 欧美日韩精品一二三区| 精品国产99国产精品| 国产精品护士白丝一区av| 青青草国产精品亚洲专区无| 国产盗摄一区二区三区| 欧美日韩午夜在线视频| 国产女人aaa级久久久级| 亚洲自拍偷拍九九九| 国产一区二区h| 欧美日韩久久一区| 亚洲国产高清aⅴ视频| 日韩1区2区3区| 一本大道久久精品懂色aⅴ| 精品国产乱子伦一区| 一区二区在线观看视频| 国产成人免费av在线| 91麻豆精品国产91| 亚洲欧美日韩国产综合| 国产激情精品久久久第一区二区| 欧美日本韩国一区二区三区视频| 国产精品久久久久久户外露出| 久久精品国产一区二区三| 欧美三电影在线| 亚洲欧美另类小说视频| 国产99久久久国产精品潘金 | 蜜桃视频一区二区三区在线观看| 色一区在线观看| 中文字幕欧美激情| 国产盗摄视频一区二区三区| 日韩视频免费直播| 日产国产高清一区二区三区| 日韩经典一区二区| 成人在线视频首页| 久久久久国产精品麻豆| 青娱乐精品视频在线| 欧美日韩一区高清| 亚洲曰韩产成在线| 一本高清dvd不卡在线观看| 国产精品久久久久久久久搜平片| 久久99精品久久久久婷婷| 欧美一卡2卡3卡4卡| 香蕉加勒比综合久久| 欧美三级在线看| 亚洲二区视频在线| 欧美日韩在线直播| 午夜影院久久久| 欧美高清精品3d| 久久国产福利国产秒拍| 精品久久久久香蕉网| 狠狠色狠狠色综合系列|