void DispatchReceive() { if (m_socket == null) { return; } // 수신처리. try { while (m_socket.Poll(0, SelectMode.SelectRead)) { byte[] buffer = new byte[m_packetSize]; int recvSize = m_socket.Receive(buffer, buffer.Length, SocketFlags.None); if (recvSize == 0) { // 연결 끊기. Debug.Log("[TCP]Disconnect recv from other."); Disconnect(); } else if (recvSize > 0) { //Debug.Log("[TCP]DispatchReceive received [Port:" + m_port + "]"); m_recvQueue.Enqueue(buffer, recvSize); } } } catch { return; } }
void DispatchReceive() { if (socket == null) { return; } try { while (socket.Poll(0, SelectMode.SelectRead)) { byte[] buffer = new byte[PACKET_SIZE]; int recvSize = socket.Receive(buffer, buffer.Length, SocketFlags.None); if (recvSize == 0) { Disconnect(); } else if (recvSize > 0) { recvQueue.Enqueue(buffer, recvSize); } } } catch { if (networkStateHandler != null) { NetworkState state = new NetworkState(); state.type = NetEventType.ReceiveError; state.result = NetEventResult.Failure; networkStateHandler(this, state); } return; } }
public void Receive(Socket socket, byte[] data, int size) // 받기 { //CheckPacket(socket, data, 0, size); lock (m_lockMainQueue) // 비동기 Receive에 의한 스레드와 메인스레드간의 동기화를 위해 Lock을 걸어준다. { m_mainQueue.Enqueue(socket, data, size); // 큐에 집어 넣는다. } }
public void TestPackagingOneTypeMessages() { var packetQueue = new PacketQueue(100, ConsoleLogger); packetQueue.Count.Should().Be(0); packetQueue.Enqueue(new DeliveryOptions(false, false), new Payload(new byte[] { 1 }, 0, 1)); packetQueue.Count.Should().Be(1); packetQueue.Enqueue(new DeliveryOptions(false, false), new Payload(new byte[] { 1 }, 0, 1)); packetQueue.Count.Should().Be(1); packetQueue.Enqueue(new DeliveryOptions(false, false), new Payload(new byte[] { 1 }, 0, 1)); packetQueue.Count.Should().Be(1); packetQueue.Enqueue(new DeliveryOptions(true, false), new Payload(new byte[] { 1 }, 0, 1)); packetQueue.Count.Should().Be(2); packetQueue.Enqueue(new DeliveryOptions(true, false), new Payload(new byte[] { 1 }, 0, 1)); packetQueue.Count.Should().Be(2); packetQueue.Enqueue(new DeliveryOptions(true, true), new Payload(new byte[] { 1 }, 0, 1)); packetQueue.Count.Should().Be(3); packetQueue.Enqueue(new DeliveryOptions(true, true), new Payload(new byte[] { 1 }, 0, 1)); packetQueue.Count.Should().Be(3); packetQueue.Enqueue(new DeliveryOptions(false, true), new Payload(new byte[] { 1 }, 0, 1)); packetQueue.Count.Should().Be(4); packetQueue.Enqueue(new DeliveryOptions(false, true), new Payload(new byte[] { 1 }, 0, 1)); packetQueue.Count.Should().Be(4); foreach (var packet in packetQueue) { packet.Length.Should().BeGreaterThan(1); } foreach (var packet in (IEnumerable)packetQueue) { packet.Should().BeOfType <PacketInfo>(); } }
// 스레드 측의 수신처리. void DispatchReceive() { // 수신처리. try { while (m_isConnected && m_socket.Poll(0, SelectMode.SelectRead)) { if (sceneName == "Game") { int gameBufferSize = 37; byte[] buffer = new byte[gameBufferSize]; int cnt = 0; while (cnt < gameBufferSize) { int recvSize = m_socket.Receive(buffer, cnt, 1, SocketFlags.None); if (recvSize == 0) { // 끊기. Debug.Log("Disconnect recv from client."); Disconnect(); } cnt += recvSize; if (cnt == 37) { break; } } Debug.Log("(게임씬)사이즈는 : " + cnt); m_recvQueue.Enqueue(buffer, cnt); } else { byte[] buffer = new byte[1024]; int recvSize = m_socket.Receive(buffer, buffer.Length, SocketFlags.None); if (recvSize == 0) { // 끊기. Debug.Log("Disconnect recv from client."); Disconnect(); } else if (recvSize > 0) { Debug.Log("사이즈는 : " + recvSize); m_recvQueue.Enqueue(buffer, recvSize); } } } } catch { return; } }
public void TestPackagingIntoMaxSizeWithLength() { var packetQueue = new PacketQueue(10, ConsoleLogger); packetQueue.Count.Should().Be(0); packetQueue.Enqueue(new DeliveryOptions(false, true), new Payload(new byte[] { 3, 1, 4, 5, 6 }, 0, 2)); packetQueue.Enqueue(new DeliveryOptions(false, true), new Payload(new byte[] { 2, 1, 4, 5, 6 }, 0, 2)); packetQueue.Count.Should().Be(1); packetQueue.Enqueue(new DeliveryOptions(false, true), new Payload(new byte[] { 2, 1 }, 0, 2)); packetQueue.Count.Should().Be(2); }
public void TestPackagingSizeWithLength() { var packetQueue = new PacketQueue(10, ConsoleLogger); packetQueue.Count.Should().Be(0); packetQueue.Enqueue(new DeliveryOptions(false, true), new Payload(new byte[] { 3, 1, 4, 5, 6 }, 1, 2)); packetQueue.Enqueue(new DeliveryOptions(false, true), new Payload(new byte[] { 2, 1, 4, 5, 6 }, 1, 2)); packetQueue.Count.Should().Be(1); packetQueue.TryDequeue(out var packet).Should().BeTrue(); packet.Length.Should().Be(4 + 5); //with metainfo }
public void DispatchReceive() { try { while (mSocketForClient.Poll(0, SelectMode.SelectRead)) { byte[] buffer = new byte[Config.MTU]; int recvSize = mSocketForClient.Receive(buffer, buffer.Length, SocketFlags.None); if (recvSize == 0) { Console.WriteLine("Disconnect recv from client."); if (mUserConnect == true) { RPGGameServer.DeleteMyUserInfo(this); } Disconnect(); } else if (recvSize > 0) { mRecvQueue.Enqueue(buffer, recvSize); } } } catch { return; } }
public void EnqueueSend(params ServerPacket[] packets) { foreach (var packet in packets) { PacketQueue.Enqueue(packet); } }
// 스레드 측 수신처리. void DispatchReceive() { // 수신처리. try { while (m_socket.Poll(0, SelectMode.SelectRead)) { byte[] buffer = new byte[s_mtu]; int recvSize = m_socket.Receive(buffer, buffer.Length, SocketFlags.None); if (recvSize == 0) { // 끊기. Debug.Log("Disconnect recv from client."); Disconnect(); } else if (recvSize > 0) { m_recvQueue.Enqueue(buffer, recvSize); } } } catch { return; } }
/// <summary> /// Dispatch Thread의 수신 처리부 /// 수신 데이터가 있으면 이를 받아서 버퍼 큐에 저장한다. /// 전송되는 데이터가 없으면 끊겼다고 판단하여 끊김을 통지한다. /// </summary> private void DispatchReceive() { // 수신처리. try { while (_socket.Poll(0, SelectMode.SelectRead)) { byte[] buffer = new byte[AppData.BufferSize]; int recvSize = _socket.Receive(buffer, buffer.Length, SocketFlags.None); if (recvSize == 0) { // 끊기. Debug.Log("Disconnect recv from Server."); Disconnect(false); } else if (recvSize > 0) { _recvQueue.Enqueue(buffer, recvSize); } } } catch { return; } }
public void SetReceiveData(byte[] data, int size, IPEndPoint endPoint) { string str = System.Text.Encoding.UTF8.GetString(data).Trim('\0'); if (str.Contains(m_requestData)) { // 접속 요청 패킷 수신. if (m_isConnected == false && m_handler != null) { NetEventState state = new NetEventState(); state.type = NetEventType.Connect; state.result = NetEventResult.Success; m_handler(this, state); //IPEndPoint ep = m_localEndPoint; //Debug.Log("[UDP]Connected from client. [address:" + ep.Address.ToString() + " port:" + ep.Port + "]"); } m_isConnected = true; m_remoteEndPoint = endPoint; m_timeOutTicker = DateTime.Now; } else if (size > 0) { m_recvQueue.Enqueue(data, size); } }
//송신처리 public int Send(byte[] data, int size) { if(sendQueue == null) return 0; return sendQueue.Enqueue(data, size); }
private void HandlePacket(Packet packet) { if (packet == null) { return; } // Logger.Log("Handling packet ..."); if (packet.Name.Equals("empty")) { Logger.Log("Packet is empty"); } if (packet.Name.Equals("error")) { Logger.Log(packet.HasChild("host-unknown") ? "error - host unknown" : "error"); } if (!packet.HasAttribute("to")) { // Logger.Log("Packet does not have To attribute"); } else { if (!packet.GetAttribute("to").ToLower().Trim().StartsWith(Properties.Account.Jid.ToLower().Trim())) { // Logger.Log("Packet To attribute does not start with Jid " + Properties.Account.Jid); } } _stanzaQueue.Enqueue(packet); }
void DispatchReceive() { if (m_socket == null) { return; } // 수신 처리. try { while (m_socket.Poll(0, SelectMode.SelectRead)) { byte[] buffer = new byte[m_packetSize]; int recvSize = m_socket.Receive(buffer, buffer.Length, SocketFlags.None); //Debug.Log("Recv udp data." + recvSize); if (recvSize == 0) { // 끊기. Disconnect(); } else if (recvSize > 0) { m_recvQueue.Enqueue(buffer, recvSize); // 수신 시각을 갱신. m_ticker = DateTime.Now; } } } catch { return; } }
public void PacketProcess(Packet iPacket) { lock (PacketQueue) { PacketQueue.Enqueue(iPacket); } }
//서버측 수신처리(스레드 작업) void DispatchReceive() { try { while(ClientSocket.Poll(0, SelectMode.SelectRead)) { byte[] buffer = new byte[BUFFERSIZE]; int receiveSize = ClientSocket.Receive(buffer, buffer.Length, SocketFlags.None); if(receiveSize == 0) { //끊기 Debug.Log("Disconnect receive from client"); Disconnect(); } else if(receiveSize > 0) { receiveQueue.Enqueue(buffer, receiveSize); } } } catch { return; } }
public int Send(byte[] data, int size) { if (m_sendQueue == null) { return(0); } return(m_sendQueue.Enqueue(data, size)); }
// enqueue - receive queue private void OnReceivePacketFromClient(Socket socket, byte[] message, int size) { receiveQueue.Enqueue(message, size); lock (lockIndexQueue) { indexClientQueue.Enqueue(socket); } }
private void OnReceivePayload(object sender, SocketAsyncEventArgs args) { args.Completed -= OnReceivePayload; var error = args.SocketError; if (error != SocketError.Success) { Log.outWarn("Client {0} triggered a socket error ({1}) when trying to fetch a payload - disconnected.", this, error); Disconnect(); return; } var bytesTransferred = args.BytesTransferred; if (bytesTransferred == 0) { Log.outInfo("Client {0} disconnected gracefully.", this); Disconnect(); return; } if (Crypt.IsInitialized) { while (bytesTransferred > 0) { Crypt.Decrypt(ReceiveBuffer); var header = BitConverter.ToUInt32(ReceiveBuffer, 0); ushort size = (ushort)(header >> 12); ushort opcode = (ushort)(header & 0xFFF); ReceiveBuffer[0] = (byte)(0xFF & size); ReceiveBuffer[1] = (byte)(0xFF & (size >> 8)); ReceiveBuffer[2] = (byte)(0xFF & opcode); ReceiveBuffer[3] = (byte)(0xFF & (opcode >> 8)); var length = BitConverter.ToUInt16(ReceiveBuffer, 0) + 4; var packetData = new byte[length]; Array.Copy(ReceiveBuffer, packetData, length); PacketReader packet = new PacketReader(packetData); PacketQueue.Enqueue(packet); bytesTransferred -= length; Array.Copy(ReceiveBuffer, length, ReceiveBuffer, 0, bytesTransferred); OnData(); } } else { OnData(); } Receive(); }
public int Send(byte[] data, int size) { if (mSendQueue == null) { return(0); } int tResult = mSendQueue.Enqueue(data, size); return(tResult); }
public async Task SendPacket(IPacket packet) { EventHandler <PacketEventArgs> sendingPacket = SendingPacket; if (sendingPacket != null) { sendingPacket(this, new PacketEventArgs(this, packet)); } PacketQueue.Enqueue(packet); await FlushPackets(); }
/// <summary> /// 接続完了後に呼び出し可能 /// 送信データをパケットとしてキューに格納する /// 送信したデータのサイズを返す /// </summary> /// <param name="data">データ</param> /// <returns>格納したデータのサイズ</returns> /// <exception cref="ArgumentException">データ長が0またはパケットサイズを超える場合</exception> /// <exception cref="InvalidOperationException">接続が確立されていない場合</exception> public int Send(byte[] data) { if (!IsConnected) { throw new InvalidOperationException("Send : 接続が完了していないためSendを呼び出せません"); } //送信データがパケット長を超えるか送信データが空であればエラー if (data.Length > PACKET_SIZE || data.Length == 0) { throw new ArgumentException(this.ToString() + " : 送信データのサイズが不正です"); } return(sendQueue.Enqueue(data)); }
public int Send(byte[] data, int size) { if (mSendQueue == null) { return(0); } int tResult = mSendQueue.Enqueue(data, size); //Console.WriteLine("Send: " + tResult.ToString()); return(tResult); }
public void Start() { serialPort.Open(); byte[] buffer = new byte[SPO2Packet.PACKET_SIZE]; reading = true; while (reading) { bool readOk = true; SPO2Packet packet = new SPO2Packet(); for (int i = 0; i < buffer.Length && readOk; i++) { int val = serialPort.ReadByte(); if (val == -1) { throw new Exception("Serial Port: End of stream."); } byte readByte = (byte)val; if ((i == 0 && !highBitOn(readByte)) || (i != 0 && highBitOn(readByte))) { readOk = false; } buffer[i] = readByte; } packet.Unpack(buffer); if (readOk && packet.HeartRate != 0) { PacketQueue.Enqueue(packet); while (PacketQueue.Count > maxQueueSize) { SPO2Packet temp; PacketQueue.TryDequeue(out temp); } } } if (serialPort != null) { serialPort.Close(); } }
void DispatchReceive() { if (m_listener == null) { return; } // 수신 처리.. try { while (m_listener.Poll(0, SelectMode.SelectRead)) { byte[] buffer = new byte[m_packetSize]; IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); EndPoint remoteEp = (EndPoint)sender; int recvSize = m_listener.ReceiveFrom(buffer, SocketFlags.None, ref remoteEp); m_remoteEndPoint = (IPEndPoint)remoteEp; if (m_endPoint == null) { m_endPoint = m_remoteEndPoint; } //Debug.Log("remote:" + m_remoteEndPoint.Address.ToString()); string str = System.Text.Encoding.UTF8.GetString(buffer); if (m_requestData.CompareTo(str.Trim('\0')) == 0) { // 접속 요청 패킷. ; } else if (recvSize == 0) { // 접속 종료. Disconnect(); } else if (recvSize > 0) { // 데이터를 수신. m_recvQueue.Enqueue(buffer, recvSize); // 수신 시각 갱신. m_timeOutTicker = DateTime.Now; } } } catch { return; } }
public void SendPacket(IServerPacket packet) { lock (Sync) { if (!IsConnected) { PacketQueue.Enqueue(packet); return; } if (!Connection.IsAvailable) { return; } Connection.Send(packet.Pack()); } }
private void ReadPacketFileHandler(byte[] e, bool isEnd) { if (isEnd) { PcapFileEOF = true; return; } PosixTimeval time = new PosixTimeval(); RawCapture rawCapture = new RawCapture(LinkLayers.Ethernet, time, e); lock (PacketQueueLock) { // push the packet to the queue . PacketQueue.Enqueue(rawCapture); } }
public void ReceiveRawData(byte[] data, int dataLength) { var timestamp = GetNow() + GetRandomDelayInSeconds() * 0.5f; // Ping is full trip time, since we scramble both server and client, we cut the duration in half bool shouldDrop = ((_random.Next() % 100) < _settings.DropChance) || _incomingDelayQueue.Count > ALWAYS_DROP_AT_QUEUE_COUNT; if (shouldDrop) { return; } var dataCopy = new byte[data.Length]; Array.Copy(data, 0, dataCopy, 0, data.Length); _incomingDelayQueue.Enqueue(new QueuedPacket() { data = dataCopy, length = dataLength, timestamp = timestamp }); }
//スレッドの受信処理 void DispatchReceive() { //受信処理 while (m_socket.Poll(0, SelectMode.SelectRead)) { byte[] buffer = new byte[s_mtu]; int recvSize = m_socket.Receive(buffer, buffer.Length, SocketFlags.None); if (recvSize == 0) { //切断 Disconnect(); } else if (recvSize > 0) { m_recvQueue.Enqueue(buffer, recvSize); } } }