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