📄 _chat_inet_8cpp-source.html
字号:
<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>->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<KChatTextBufLength> 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->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->Length());<a name="l00451"></a>00451 <a class="code" href="class_c_chat_inet.html#83107f9dbd3370ed4e809e8cc7b35380">iMessage</a>->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>->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> = &<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->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>->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 + -