Ejemplo n.º 1
0
 public PacketSend Write(byte v)
 {
     if (_i + 1 >= _arrByte64K.arrByte64K.Length)
     {
         Log(ArrByteReader.GetuShort(_arrByte64K.arrByte64K, 6).ToString() + " over buff");
         return(this);
     }
     _arrByte64K.arrByte64K[_i] = (v); _i++;
     return(this);
 }
Ejemplo n.º 2
0
 public PacketSend Write(int v)
 {
     if (_i + 4 >= _arrByte64K.arrByte64K.Length)
     {
         Log(ArrByteReader.GetuShort(_arrByte64K.arrByte64K, 6).ToString() + " over buff");
         return(this);
     }
     _arrByte64K.arrByte64K[_i] = (byte)(v >> 24); _i++;
     _arrByte64K.arrByte64K[_i] = (byte)(v >> 16); _i++;
     _arrByte64K.arrByte64K[_i] = (byte)(v >> 8); _i++;
     _arrByte64K.arrByte64K[_i] = (byte)(v); _i++;
     return(this);
 }
Ejemplo n.º 3
0
        private PacketSend WriteUTF8(string value)
        {
            int length = Encoding.UTF8.GetByteCount(value);

            if (_i + length + 2 >= _arrByte64K.arrByte64K.Length)
            {
                Log(ArrByteReader.GetuShort(_arrByte64K.arrByte64K, 6).ToString() + " over buff");
                return(this);
            }
            Write((ushort)length);
            Encoding.UTF8.GetBytes(value, 0, value.Length, _arrByte64K.arrByte64K, (int)_i);
            _i += (ushort)length;
            return(this);
        }
Ejemplo n.º 4
0
 public PacketSend Write(byte[] v, int length)
 {
     if (_i + length + sizeof(ushort) >= _arrByte64K.arrByte64K.Length)
     {
         Log(ArrByteReader.GetuShort(_arrByte64K.arrByte64K, 6).ToString() + " over buff");
         return(this);
     }
     Write((ushort)length);
     for (int i = _i; i < _i + length; i++)
     {
         _arrByte64K.arrByte64K[i] = v[i - _i];
     }
     _i += (ushort)length;
     return(this);
 }
Ejemplo n.º 5
0
        public static OperationRequest CreateOperationRequest(ArrByte64K arrByte64K)
        {
            ArrByteReader reader = new ArrByteReader();

            reader.SetArrByte(arrByte64K);
            OperationRequest operationRequest = new OperationRequest();

            operationRequest.OperationCode = reader.ReadByte();
            operationRequest.Parameters    = new Dictionary <byte, object>();
            while (reader.ReadLen < arrByte64K.len)
            {
                byte      key   = reader.ReadByte();
                ValueType type  = (ValueType)reader.ReadByte();
                object    value = null;//reader.ReadUTF8String();
                switch (type)
                {
                case ValueType.EnumInt: { value = reader.ReadInt(); } break;

                case ValueType.Boolean: { value = reader.ReadBool(); } break;

                case ValueType.Byte: { value = reader.ReadByte(); } break;

                case ValueType.Int16: { value = reader.ReadShort(); } break;

                case ValueType.Int32: { value = reader.ReadInt(); } break;

                case ValueType.Int64: { value = reader.ReadLong(); } break;

                case ValueType.SByte: { value = reader.ReadSByte(); } break;

                case ValueType.String: { value = reader.ReadUTF8String(); } break;

                case ValueType.UInt16: { value = reader.ReaduShort(); } break;

                case ValueType.UInt32: { value = reader.ReadUint(); } break;

                case ValueType.UInt64: { value = reader.ReaduLong(); } break;
                }
                operationRequest.Parameters.Add(key, value);
            }
            return(operationRequest);
        }
Ejemplo n.º 6
0
        private void ProcessReceive(SocketAsyncEventArgs e)
        {
            UserToken token = e.UserToken as UserToken;

            if (token.Socket == null)
            {
                return;
            }
            if (e.BytesTransferred > 0 && e.SocketError == SocketError.Success)
            {
                int offset   = token.receiveEventArgs.Offset;
                int count    = token.receiveEventArgs.BytesTransferred;
                var readBuff = token.receiveEventArgs.Buffer;
                if (token.arrBuffRead == null)
                {
                    token.arrBuffRead = arrByte64KPool.Get();
                }
                while (count > 0)
                {
                    if (count + token.arrBuffRead.len < token.arrBuffRead.arrByte64K.Length)
                    {
                        Array.Copy(readBuff, offset, token.arrBuffRead.arrByte64K, token.arrBuffRead.len, count);
                        token.arrBuffRead.len += count;
                        offset += count;
                        count   = 0;
                    }
                    else
                    {
                        Array.Copy(readBuff, offset, token.arrBuffRead.arrByte64K, token.arrBuffRead.len, token.arrBuffRead.arrByte64K.Length - token.arrBuffRead.len);
                        token.arrBuffRead.len = token.arrBuffRead.arrByte64K.Length;
                        offset += token.arrBuffRead.arrByte64K.Length - token.arrBuffRead.len;
                        count  -= token.arrBuffRead.arrByte64K.Length - token.arrBuffRead.len;
                    }
                    while (token.arrBuffRead != null && token.arrBuffRead.len >= 2)
                    {
                        int len = ArrByteReader.GetuShort(token.arrBuffRead.arrByte64K, 0);
                        if (len > token.arrBuffRead.arrByte64K.Length)
                        {
                            CloseClientSocket(e);
                            return;
                        }
                        if (token.arrBuffRead.len >= len)
                        {
                            var pk = arrByte64KPool.Get();
                            Array.Copy(token.arrBuffRead.arrByte64K, 2, pk.arrByte64K, 0, len - 2);
                            pk.len = len - 2;
                            {
                                //dosomething 分发数据
                                Packet packet = new Packet();
                                packet.arrByte64K = pk;
                                packet.connId     = token.connId;
                                PutReceivePacket(packet);
                            }


                            if (token.arrBuffRead.len > len)
                            {
                                var arrBuff = arrByte64KPool.Get();
                                arrBuff.len = token.arrBuffRead.len - len;
                                Array.Copy(token.arrBuffRead.arrByte64K, len, arrBuff.arrByte64K, 0, arrBuff.len);
                                arrByte64KPool.Put(token.arrBuffRead);
                                token.arrBuffRead = arrBuff;
                            }
                            else
                            {
                                arrByte64KPool.Put(token.arrBuffRead);
                                token.arrBuffRead = null;
                            }
                        }
                        else
                        {
                            break;
                        }
                    }
                }
                try
                {
                    bool willRaiseEvent = token.Socket.ReceiveAsync(e);
                    if (!willRaiseEvent)
                    {
                        ProcessReceive(e);
                    }
                }
                catch (Exception ex)
                {
                    Log(ex.Message);
                    CloseClientSocket(e);
                }
            }
            else
            {
                CloseClientSocket(e);
            }
        }