📄 receiver.java
字号:
// Receiver.java
//
// Copyright (c) 2000-2001 Symbian Ltd. All rights reserved
package com.symbian.devnet.whist.tokenRing;
import javax.net.datagram.*;
import java.io.*;
import java.util.*;
/**
* Class used to handle for incoming datagrams
* @author Symbian Devnet
*/
class Receiver
{
/** Maximum length of an incoming message */
private static final int LENGTH = 160;
/** Datagram service used for receiving messages from */
private DatagramService dgService;
/** Vector of DatagramListener objects to sent DatagramEvents to when datagrams received */
private Vector listeners = new Vector();
/** Address of receiver */
private Address sAddress;
/** Buffer used for incoming datagrams */
private byte[] buffer;
/**
* Constructor
* @param a Address of receiver
*/
Receiver(DatagramService dgs, Address a)
{
dgService = dgs;
sAddress = a;
}
/**
* Called to launch receive thread in order to handle incoming datagrams
*/
public void listen()
{
// Requires new thread to receive datagrams to ensure no other threads are blocked
Thread receiveThread = new Thread()
{
public void run()
{
while(true)
{
try
{
buffer = new byte[LENGTH];
char zero = ' ';
Datagram dg = new Datagram(buffer); // Set up receiving datagram
for (int i = 0; i < LENGTH; i++)
buffer[i] = (byte)zero;
dgService.receive(dg);
}
catch(Exception ex)
{
System.out.println("Receiver terminated. Exception: " + ex.getMessage());
System.exit(0);
}
DatagramEvent dge = new DatagramEvent(this, buffer);
processDatagram(dge);
}
}
};
receiveThread.start();
}
/**
* Close the receiver
*/
public void close()
{
try
{
dgService.close();
}
catch(IOException ioe)
{
System.out.println("Could not close DatagramService:" + ioe.getMessage());
System.exit(0);
}
}
/**
* Process a new datagram by notifying all listeners
* @param notification Event to be sent to all listeners
*/
private void processDatagram(DatagramEvent notification)
{
for (Enumeration en = listeners.elements(); en.hasMoreElements();)
{
DatagramListener listener = (DatagramListener)en.nextElement();
listener.DatagramReceived(notification);
}
}
/**
* Call to register interest in incoming datagrams
* @param listener Implementation of the DatagramListener interface to be called when
* a new datagram is received
*/
public void addDatagramListener(DatagramListener listener)
{
listeners.addElement(listener);
}
/**
* Call to deregister interest in incoming datagrams
* @param listener Implementation of the DatagramListener interface previously supplied
* as an argument to addDatagramListener
*/
public void removeDatagramListener(DatagramListener listener)
{
listeners.removeElement(listener);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -