72 lines
1.7 KiB
C#
72 lines
1.7 KiB
C#
// This file is part of the EonaCat project(s) which is released under the Apache License.
|
|
// See the LICENSE file or go to https://EonaCat.com/License for full license details.
|
|
|
|
using System;
|
|
|
|
namespace EonaCat.Network
|
|
{
|
|
public class MessageEventArgs : EventArgs
|
|
{
|
|
private readonly byte[] _rawData;
|
|
private string _data;
|
|
private bool _dataSet;
|
|
|
|
internal MessageEventArgs(WSFrame frame)
|
|
{
|
|
Opcode = frame.Opcode;
|
|
_rawData = frame.Payload.ApplicationData;
|
|
}
|
|
|
|
internal MessageEventArgs(OperationCode opcode, byte[] rawData)
|
|
{
|
|
if ((ulong)rawData.LongLength > Payload.MaxLength)
|
|
{
|
|
throw new WSException(CloseStatusCode.TooBig);
|
|
}
|
|
|
|
Opcode = opcode;
|
|
_rawData = rawData;
|
|
}
|
|
|
|
public string Data
|
|
{
|
|
get
|
|
{
|
|
setData();
|
|
return _data;
|
|
}
|
|
}
|
|
|
|
public bool IsBinary => Opcode == OperationCode.Binary;
|
|
public bool IsPing => Opcode == OperationCode.Ping;
|
|
public bool IsText => Opcode == OperationCode.Text;
|
|
|
|
public byte[] RawData
|
|
{
|
|
get
|
|
{
|
|
setData();
|
|
return _rawData;
|
|
}
|
|
}
|
|
|
|
internal OperationCode Opcode { get; }
|
|
|
|
private void setData()
|
|
{
|
|
if (_dataSet)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (Opcode == OperationCode.Binary)
|
|
{
|
|
_dataSet = true;
|
|
return;
|
|
}
|
|
|
|
_data = _rawData.UTF8Decode();
|
|
_dataSet = true;
|
|
}
|
|
}
|
|
} |