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); }
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); }
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); }
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); }
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); }
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); } }