⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 _chat_inet_8cpp-source.html

📁 一个聊天的软件
💻 HTML
📖 第 1 页 / 共 4 页
字号:
<a name="l00435"></a>00435     <span class="keywordflow">if</span> ( <a class="code" href="class_c_chat_inet.html#42435def2f80909f7700ad684c625f0f">iActiveSocket</a> )<a name="l00436"></a>00436         {<a name="l00437"></a>00437         <a class="code" href="class_c_chat_inet.html#42435def2f80909f7700ad684c625f0f">iActiveSocket</a>-&gt;CancelRead();  <a name="l00438"></a>00438         }<a name="l00439"></a>00439 <a name="l00440"></a>00440     <span class="keywordflow">if</span> ( IsActive() )<a name="l00441"></a>00441         {<a name="l00442"></a>00442         Cancel();<a name="l00443"></a>00443         }<a name="l00444"></a>00444       <a name="l00445"></a>00445     TBufC&lt;KChatTextBufLength&gt; message ( aText );<a name="l00446"></a>00446     <a class="code" href="class_c_chat_base.html#deacd9f98d0548748cf116698aea2be0">SetState</a>( ESendingMessage );<a name="l00447"></a>00447     HBufC* tempString = HBufC::NewL( message.Length() );<a name="l00448"></a>00448     tempString-&gt;Des().Copy( message );<a name="l00449"></a>00449     <a name="l00450"></a>00450     <a class="code" href="class_c_chat_inet.html#83107f9dbd3370ed4e809e8cc7b35380">iMessage</a> = HBufC8::NewL(tempString-&gt;Length());<a name="l00451"></a>00451     <a class="code" href="class_c_chat_inet.html#83107f9dbd3370ed4e809e8cc7b35380">iMessage</a>-&gt;Des().Copy( *tempString );<a name="l00452"></a>00452     <a name="l00453"></a>00453     <span class="comment">// write message to socket</span><a name="l00454"></a>00454     <span class="keywordflow">if</span> ( <a class="code" href="class_c_chat_inet.html#42435def2f80909f7700ad684c625f0f">iActiveSocket</a> )<a name="l00455"></a>00455         {<a name="l00456"></a>00456         <a class="code" href="class_c_chat_inet.html#42435def2f80909f7700ad684c625f0f">iActiveSocket</a>-&gt;Write( *<a class="code" href="class_c_chat_inet.html#83107f9dbd3370ed4e809e8cc7b35380">iMessage</a>, iStatus );<a name="l00457"></a>00457         }<a name="l00458"></a>00458     <span class="keyword">delete</span> tempString;<a name="l00459"></a>00459     SetActive();<a name="l00460"></a>00460     }<a name="l00461"></a>00461 <a name="l00462"></a>00462 <a name="l00463"></a>00463 <span class="comment">// ----------------------------------------------------------------------------</span><a name="l00464"></a>00464 <span class="comment">// CChatInet::StartL()</span><a name="l00465"></a>00465 <span class="comment">// Starts the server.</span><a name="l00466"></a>00466 <span class="comment">// ----------------------------------------------------------------------------</span><a name="l00467"></a>00467 <span class="comment">//</span><a name="l00468"></a><a class="code" href="class_c_chat_inet.html#4dc55dfb9b7a14b604eac53f42d0a222">00468</a> <span class="keywordtype">void</span> <a class="code" href="class_c_chat_inet.html#4dc55dfb9b7a14b604eac53f42d0a222">CChatInet::StartL</a>()<a name="l00469"></a>00469     {<a name="l00470"></a>00470     <span class="keywordflow">if</span> ( <a class="code" href="class_c_chat_base.html#af77e92297a4bac4704e440284577ebe">State</a>() != EDisconnected )<a name="l00471"></a>00471         {<a name="l00472"></a>00472         User::Leave( KErrInUse );<a name="l00473"></a>00473         }<a name="l00474"></a>00474     <a name="l00475"></a>00475     User::LeaveIfError( <a class="code" href="class_c_chat_inet.html#f702971f167e073a81134fd2876d0298">iConnection</a>.Open( <a class="code" href="class_c_chat_inet.html#56bd53f21c6818eaa0d4a1ad2c7c5a84">iSocketServer</a>, KAfInet) );<a name="l00476"></a>00476     <a name="l00477"></a>00477     User::LeaveIfError( <a class="code" href="class_c_chat_inet.html#f702971f167e073a81134fd2876d0298">iConnection</a>.Start() );<a name="l00478"></a>00478       <a name="l00479"></a>00479     TInt result( 0 );<a name="l00480"></a>00480     <a name="l00481"></a>00481     result = <a class="code" href="class_c_chat_inet.html#4791a9b2a2447d2068a89acb05c8c25b">iSocket</a>.Open( <a class="code" href="class_c_chat_inet.html#56bd53f21c6818eaa0d4a1ad2c7c5a84">iSocketServer</a>, <a name="l00482"></a>00482         KAfInet, <a name="l00483"></a>00483         KSockStream, <a name="l00484"></a>00484         KProtocolInetTcp );<a name="l00485"></a>00485       <a name="l00486"></a>00486     <span class="keywordflow">if</span> ( result != KErrNone )<a name="l00487"></a>00487         {<a name="l00488"></a>00488         <a class="code" href="class_c_chat_inet.html#56bd53f21c6818eaa0d4a1ad2c7c5a84">iSocketServer</a>.Close();<a name="l00489"></a>00489         User::Leave( result ); <a name="l00490"></a>00490         }<a name="l00491"></a>00491 <a name="l00492"></a>00492     TInetAddr addr;<a name="l00493"></a>00493     <a class="code" href="class_c_chat_inet.html#5d2af0e4e421312918bddbe0e0861f28">iAddress</a>.SetPort( <a class="code" href="class_c_chat_inet.html#ca13b175f9849e6ff5ce23ea58682739">iPort</a> );<a name="l00494"></a>00494     <a class="code" href="class_c_chat_inet.html#5d2af0e4e421312918bddbe0e0861f28">iAddress</a>.SetFamily( KAfInet );<a name="l00495"></a>00495 <a name="l00496"></a>00496     <span class="comment">// bind</span><a name="l00497"></a>00497     User::LeaveIfError( <a class="code" href="class_c_chat_inet.html#4791a9b2a2447d2068a89acb05c8c25b">iSocket</a>.Bind( <a class="code" href="class_c_chat_inet.html#5d2af0e4e421312918bddbe0e0861f28">iAddress</a> ) );<a name="l00498"></a>00498     <a name="l00499"></a>00499     <span class="comment">// listen</span><a name="l00500"></a>00500     User::LeaveIfError( <a class="code" href="class_c_chat_inet.html#4791a9b2a2447d2068a89acb05c8c25b">iSocket</a>.Listen( KListeningQueSize ) );<a name="l00501"></a>00501 <a name="l00502"></a>00502     <span class="comment">// close old connection - if any</span><a name="l00503"></a>00503     <a class="code" href="class_c_chat_inet.html#43d47cb0a780f4af02110487231ac627">iAcceptedSocket</a>.Close();<a name="l00504"></a>00504 <a name="l00505"></a>00505     <span class="comment">// Open abstract socket</span><a name="l00506"></a>00506     User::LeaveIfError( <a class="code" href="class_c_chat_inet.html#43d47cb0a780f4af02110487231ac627">iAcceptedSocket</a>.Open( <a class="code" href="class_c_chat_inet.html#56bd53f21c6818eaa0d4a1ad2c7c5a84">iSocketServer</a> ) );  <a name="l00507"></a>00507   <a name="l00508"></a>00508     <a class="code" href="class_c_chat_inet.html#42435def2f80909f7700ad684c625f0f">iActiveSocket</a> = &amp;<a class="code" href="class_c_chat_inet.html#43d47cb0a780f4af02110487231ac627">iAcceptedSocket</a>;<a name="l00509"></a>00509   <a name="l00510"></a>00510     <span class="comment">// Set the Active Object's State to Connecting indicated.</span><a name="l00511"></a>00511     <a class="code" href="class_c_chat_base.html#deacd9f98d0548748cf116698aea2be0">SetState</a>( EGettingConnection );<a name="l00512"></a>00512 <a name="l00513"></a>00513     <a class="code" href="class_c_chat_inet.html#4791a9b2a2447d2068a89acb05c8c25b">iSocket</a>.Accept( <a class="code" href="class_c_chat_inet.html#43d47cb0a780f4af02110487231ac627">iAcceptedSocket</a>, iStatus );<a name="l00514"></a>00514 <a name="l00515"></a>00515     <a class="code" href="class_c_chat_base.html#3632b5e9a01d31118bbf932b3cd23f34">SetServer</a>( ETrue );<a name="l00516"></a>00516 <a name="l00517"></a>00517     <span class="comment">// Set the Active Object Active again,</span><a name="l00518"></a>00518     SetActive();<a name="l00519"></a>00519    <a name="l00520"></a>00520     }<a name="l00521"></a>00521 <a name="l00522"></a>00522 <a name="l00523"></a>00523 <span class="comment">// ----------------------------------------------------------------------------</span><a name="l00524"></a>00524 <span class="comment">// CChatInet::Stop()</span><a name="l00525"></a>00525 <span class="comment">// Stops the server.</span><a name="l00526"></a>00526 <span class="comment">// ----------------------------------------------------------------------------</span><a name="l00527"></a>00527 <span class="comment">//</span><a name="l00528"></a><a class="code" href="class_c_chat_inet.html#78109ff8cb02d98ff75ab125fa94a8d4">00528</a> <span class="keywordtype">void</span> <a class="code" href="class_c_chat_inet.html#78109ff8cb02d98ff75ab125fa94a8d4">CChatInet::Stop</a>()<a name="l00529"></a>00529     {<a name="l00530"></a>00530     <span class="keywordflow">if</span> ( <a class="code" href="class_c_chat_base.html#af77e92297a4bac4704e440284577ebe">State</a>() != EDisconnected )<a name="l00531"></a>00531         {<a name="l00532"></a>00532         <span class="comment">// Close() will wait forever for Read to complete</span><a name="l00533"></a>00533         <span class="keywordflow">if</span> ( <a class="code" href="class_c_chat_base.html#af77e92297a4bac4704e440284577ebe">State</a>() == EConnected )<a name="l00534"></a>00534             {<a name="l00535"></a>00535             <span class="keywordflow">if</span> ( <a class="code" href="class_c_chat_inet.html#42435def2f80909f7700ad684c625f0f">iActiveSocket</a> )<a name="l00536"></a>00536                 {<a name="l00537"></a>00537                 iActiveSocket-&gt;CancelRead();<a name="l00538"></a>00538                 }<a name="l00539"></a>00539             }<a name="l00540"></a>00540         <a class="code" href="class_c_chat_inet.html#43d47cb0a780f4af02110487231ac627">iAcceptedSocket</a>.Close();<a name="l00541"></a>00541         <a class="code" href="class_c_chat_inet.html#4791a9b2a2447d2068a89acb05c8c25b">iSocket</a>.Close();<a name="l00542"></a>00542         }<a name="l00543"></a>00543         <a class="code" href="class_c_chat_base.html#deacd9f98d0548748cf116698aea2be0">SetState</a>( EDisconnected );<a name="l00544"></a>00544     }<a name="l00545"></a>00545 <a name="l00546"></a>00546 <span class="comment">// ----------------------------------------------------------------------------</span><a name="l00547"></a>00547 <span class="comment">// CChatInet::RequestData()</span><a name="l00548"></a>00548 <span class="comment">// Request data from the client.</span><a name="l00549"></a>00549 <span class="comment">// ----------------------------------------------------------------------------</span><a name="l00550"></a>00550 <span class="comment">//</span><a name="l00551"></a><a class="code" href="class_c_chat_inet.html#06e3ea78e9321c78ffb364082161da6c">00551</a> <span class="keywordtype">void</span> <a class="code" href="class_c_chat_inet.html#06e3ea78e9321c78ffb364082161da6c">CChatInet::RequestData</a>()<a name="l00552"></a>00552     {<a name="l00553"></a>00553     <span class="keywordflow">if</span> ( <a class="code" href="class_c_chat_inet.html#42435def2f80909f7700ad684c625f0f">iActiveSocket</a> )<a name="l00554"></a>00554         {<a name="l00555"></a>00555         <a class="code" href="class_c_chat_inet.html#42435def2f80909f7700ad684c625f0f">iActiveSocket</a>-&gt;RecvOneOrMore( <a class="code" href="class_c_chat_inet.html#04fb56a9c5c1c56ed0335a50a6065a82">iBuffer</a>, 0, iStatus, <a class="code" href="class_c_chat_inet.html#cb196e8158421aa29d9c132a8522e9b4">iLen</a> );<a name="l00556"></a>00556         }<a name="l00557"></a>00557     SetActive();<a name="l00558"></a>00558     }<a name="l00559"></a>00559 <a name="l00560"></a>00560 <a name="l00561"></a>00561 <span class="comment">// End of File</span></pre></div><hr><table x-use-null-cells		style="x-cell-content-align: top;				width: 100%;				border-spacing: 0px;				border-spacing: 0px;"		cellspacing=0		width=100%>  <col style="width: 50%;">  <col style="width: 50%;">  <tr style="x-cell-content-align: top;"	valign=top>  <td style="width: 50%;			padding-right: 10px;			padding-left: 10px;			border-right-style: None;			border-left-style: None;			border-top-style: None;			border-bottom-style: None;"	width=50%>  <p style="font-family: Arial;"><small style="font-size: smaller;">

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -