コード例 #1
0
ファイル: SocketClient.cs プロジェクト: jjcz123456/CardTK
        private void ReadFrom(byte[] src)
        {
            var len = 0;

            if (_pos < PROTOCOL_TYPE_SIZE)
            {
                len = Math.Min(PROTOCOL_TYPE_SIZE - _pos, src.Length);

                if (len > 0)
                {
                    _pTypeBuffer = _pTypeBuffer.Concat(src.Take(len)).ToArray();
                    src = src.Skip(len).ToArray();

                    if (_pTypeBuffer.Length == PROTOCOL_TYPE_SIZE)
                    {
                        _pTypeBuffer = _pTypeBuffer.Reverse().ToArray();

                        var c = BitConverter.ToInt32(_pTypeBuffer, 0);
                    }

                    _pos += len;
                }

            }

            if (_pos >= PROTOCOL_TYPE_SIZE && _pos < PROTOCOL_TYPE_SIZE + HEADER_SIZE)
            {
                len = Math.Min(PROTOCOL_TYPE_SIZE + HEADER_SIZE - _pos, src.Length);
                if (len > 0)
                {
                    _pLenBuffer = _pLenBuffer.Concat(src.Take(len)).ToArray();
                    src = src.Skip(len).ToArray();

                    if (_pLenBuffer.Length == HEADER_SIZE)
                    {
                        _pLenBuffer = _pLenBuffer.Reverse().ToArray();

                        _dataLength = BitConverter.ToInt32(_pLenBuffer, 0);
                    }

                    _pos += len;
                }
            }

            if (_pos >= PROTOCOL_TYPE_SIZE + HEADER_SIZE)
            {
                len = Math.Min(_dataLength + PROTOCOL_TYPE_SIZE + HEADER_SIZE - _pos, src.Length);
                if (len > 0)
                {
                    _pDataBuffer = _pDataBuffer.Concat(src.Take(len)).ToArray();
                    src = src.Skip(len).ToArray();

                    _pos += len;
                }
            }
            if (Remain == 0)
            {
                //var rawStr = Encoding.UTF8.GetString(_pDataBuffer, 0, _pDataBuffer.Length);

                //_testMsg = rawStr;
                //if (OnDataReceived != null)
                //{
                //    OnDataReceived(rawStr);
                //}

                //Sysinfo("Message Received.");

                var a3p = new AMF3Protocol();
                //a3p.SetBytes
                var da = new ByteArray();
                da.WriteBytes(_pDataBuffer, 0, _pDataBuffer.Length);
                a3p.SetBytes(da);

                if (OnAMFMsgReceived != null)
                {
                    OnAMFMsgReceived(a3p);
                }

                Reset();

            }

            if (src.Length > 0)
            {
                ReadFrom(src);
            }
        }
コード例 #2
0
ファイル: SocketClient.cs プロジェクト: jjcz123456/CardTK
        public void Send(string act, string cmd, Object data)
        {
            if (!_tcpClient.Connected)
                throw new Exception("Closed, cannot send data.");

            var reqResVO = new ReqResVO();

            reqResVO.accountId = SessionInfo._currentSysUserVO == null ?
                0 : SessionInfo._currentSysUserVO.suAccountVO.saId;
            reqResVO.userId = SessionInfo._currentSysUserVO == null ?
                0 : SessionInfo._currentSysUserVO.suId;

            reqResVO.sessionId = 0;
            reqResVO.action = act;
            reqResVO.command = cmd;
            reqResVO.data = data;

            //var id: String = getIdByVO(reqResVO);

            //if(callback != null) _callbackMap[id] = callback;

            //Logger.debug(SocketService,reqResVO.toString());

            //var protocol: IProtocol = ProtocolBuilder.newProtocol(ProtocolType.AMF3_PROTOCOL);

            var protocol = new AMF3Protocol();

            protocol.SetData(reqResVO);

            var b1 = protocol.GetBytes();

            var b2 = FluorineFx.Util.Convert.ToByteArray(b1);

            var msg = new ByteArray();

            msg.WriteInt(1);
            msg.WriteInt((int)b1.Length);

            var b3 = b2.Take((int)b1.Length).ToArray();

            msg.WriteBytes(b3, 0, b3.Length);

            b3 = FluorineFx.Util.Convert.ToByteArray(msg).Take((int)msg.Length).ToArray();

            Sysinfo("Sending " + act + "#" + cmd);

            _tcpClient.Client.Send(b3);
        }