private void BeginSend() { try { if (IsConnected == false) { Debug.Log("BeginSend() : IsConnected() == false"); return; } if (ConnectState != EConnectState.Connected) { // 서버와의 기본 통신까지 끝난 상태여야 패킷을 보낼수 있다. Debug.Log("BeginSend() : ConnectState != ReconnectState.Connected"); return; } Message msg = null; lock ( csSend ) { if (queSend.Count == 0) { return; } msg = queSend.Peek(); } switch (msg.RmiContextValue) { case (byte)RmiContext.ReliableCompress: { ZipHelper.CompressToMessage(ref msg); } break; case (byte)RmiContext.FastEncryp: { Crypto.XOREncrypt(msg.buffer, BasicType.HEADSIZE, msg.Length); } break; case (byte)RmiContext.FastEncrypCompress: { Crypto.XOREncrypt(msg.buffer, BasicType.HEADSIZE, msg.Length); ZipHelper.CompressToMessage(ref msg); } break; } ++SequenceNumSend; msg.SequenceNum = SequenceNumSend; socket.BeginSend(msg.buffer, 0, msg.Length, SocketFlags.None, asyncCallbackSend, socket); } catch (Exception ex) { Debug.Log("BeginSend() exception : " + ex.ToString()); try { if (socket != null) { socket.Close(); } } catch (Exception) { Debug.Log("BeginSend() socket shutdown Exception " + ex.ToString()); } ConnectState = EConnectState.None; } }