Example #1
0
        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;
            }
        }