@@ -26,11 +26,17 @@ public class NetworkInterface
2626 PacketReceiver _packetReceiver = null ;
2727 PacketSender _packetSender = null ;
2828
29- // for connect
30- string _connectIP ;
31- int _connectPort ;
32- ConnectCallback _connectCB ;
33- object _userData ;
29+ public class ConnectState
30+ {
31+ // for connect
32+ public string connectIP = "" ;
33+ public int connectPort = 0 ;
34+ public ConnectCallback connectCB = null ;
35+ public object userData = null ;
36+ public Socket socket = null ;
37+ public NetworkInterface networkInterface = null ;
38+ public string error = "" ;
39+ }
3440
3541 public NetworkInterface ( )
3642 {
@@ -46,11 +52,6 @@ public void reset()
4652 _socket = null ;
4753 _packetReceiver = null ;
4854 _packetSender = null ;
49-
50- _connectIP = "" ;
51- _connectPort = 0 ;
52- _connectCB = null ;
53- _userData = null ;
5455 }
5556
5657 public Socket sock ( )
@@ -68,45 +69,46 @@ public bool valid()
6869 return ( ( _socket != null ) && ( _socket . Connected == true ) ) ;
6970 }
7071
71- public void _onConnectStatus ( string error )
72+ public void _onConnectStatus ( ConnectState state )
7273 {
7374 KBEngine . Event . deregisterIn ( this ) ;
7475
75- bool success = ( error == "" && valid ( ) ) ;
76-
76+ bool success = ( state . error == "" && valid ( ) ) ;
7777 if ( success )
7878 {
79- Dbg . DEBUG_MSG ( string . Format ( "NetworkInterface::_onConnectStatus(), connect to {0} is success!" , sock ( ) . RemoteEndPoint . ToString ( ) ) ) ;
79+ Dbg . DEBUG_MSG ( string . Format ( "NetworkInterface::_onConnectStatus(), connect to {0} is success!" , state . socket . RemoteEndPoint . ToString ( ) ) ) ;
8080 _packetReceiver = new PacketReceiver ( this ) ;
8181 _packetReceiver . startRecv ( ) ;
8282 }
8383 else
8484 {
85- Dbg . ERROR_MSG ( string . Format ( "NetworkInterface::_onConnectStatus(), connect is error! ip: {0}:{1}, err: {2}" , _connectIP , _connectPort , error ) ) ;
85+ Dbg . ERROR_MSG ( string . Format ( "NetworkInterface::_onConnectStatus(), connect is error! ip: {0}:{1}, err: {2}" , state . connectIP , state . connectPort , state . error ) ) ;
8686 }
8787
8888 Event . fireAll ( "onConnectStatus" , new object [ ] { success } ) ;
8989
90- if ( _connectCB != null )
91- _connectCB ( _connectIP , _connectPort , success , _userData ) ;
90+ if ( state . connectCB != null )
91+ state . connectCB ( state . connectIP , state . connectPort , success , state . userData ) ;
9292 }
9393
9494 private static void connectCB ( IAsyncResult ar )
9595 {
96+ ConnectState state = null ;
97+
9698 try
9799 {
98100 // Retrieve the socket from the state object.
99- NetworkInterface networkInterface = ( NetworkInterface ) ar . AsyncState ;
101+ state = ( ConnectState ) ar . AsyncState ;
100102
101103 // Complete the connection.
102- if ( networkInterface . sock ( ) != null )
103- networkInterface . sock ( ) . EndConnect ( ar ) ;
104+ state . socket . EndConnect ( ar ) ;
104105
105- Event . fireIn ( "_onConnectStatus" , new object [ ] { "" } ) ;
106+ Event . fireIn ( "_onConnectStatus" , new object [ ] { state } ) ;
106107 }
107108 catch ( Exception e )
108109 {
109- Event . fireIn ( "_onConnectStatus" , new object [ ] { e . ToString ( ) } ) ;
110+ state . error = e . ToString ( ) ;
111+ Event . fireIn ( "_onConnectStatus" , new object [ ] { state } ) ;
110112 }
111113 }
112114
@@ -125,10 +127,13 @@ public void connectTo(string ip, int port, ConnectCallback callback, object user
125127 _socket = new Socket ( AddressFamily . InterNetwork , SocketType . Stream , ProtocolType . Tcp ) ;
126128 _socket . SetSocketOption ( System . Net . Sockets . SocketOptionLevel . Socket , SocketOptionName . ReceiveBuffer , KBEngineApp . app . getInitArgs ( ) . getRecvBufferSize ( ) * 2 ) ;
127129
128- _connectIP = ip ;
129- _connectPort = port ;
130- _connectCB = callback ;
131- _userData = userData ;
130+ ConnectState state = new ConnectState ( ) ;
131+ state . connectIP = ip ;
132+ state . connectPort = port ;
133+ state . connectCB = callback ;
134+ state . userData = userData ;
135+ state . socket = _socket ;
136+ state . networkInterface = this ;
132137
133138 Dbg . DEBUG_MSG ( "connect to " + ip + ":" + port + " ..." ) ;
134139
@@ -137,11 +142,12 @@ public void connectTo(string ip, int port, ConnectCallback callback, object user
137142
138143 try
139144 {
140- _socket . BeginConnect ( new IPEndPoint ( IPAddress . Parse ( ip ) , port ) , new AsyncCallback ( connectCB ) , this ) ;
145+ _socket . BeginConnect ( new IPEndPoint ( IPAddress . Parse ( ip ) , port ) , new AsyncCallback ( connectCB ) , state ) ;
141146 }
142147 catch ( Exception e )
143148 {
144- Event . fireIn ( "_onConnectStatus" , new object [ ] { e . ToString ( ) } ) ;
149+ state . error = e . ToString ( ) ;
150+ Event . fireIn ( "_onConnectStatus" , new object [ ] { state } ) ;
145151 }
146152 }
147153
0 commit comments