글
현재까지 클라이언트 진도 5%;;(새로 접하는 개념이라 자꾸 삽질이 있음;;)
import java.io.*; //콘솔 출력용 버퍼드 라이터
import java.net.*; //
import java.nio.*; //다이렉트 바이트 버퍼
import java.nio.channels.*; //소켓및 리스너
import java.util.concurrent.*; //망할 큐 사용;;
public class Client
{
//유저정보
private UserInfo user;
private ServerInfo serverInfo;
//소켓관련
private Selector selector;
private SocketChannel socketChannel;
//메세지 타입
public static MsgType msgType;
//채팅 내용을 화면에 뿌릴 메세지 버퍼
//private ArrayList<String> chatList;
//생각을 잘못함. nio 스트림 써야함..
//long read (ByteBuffer [] dsts) 이 채널의 바이트 순서가 지정된 버퍼에
//읽어들입니다.
//그럼으로 nio.바이트버퍼 필요 + 다이렉트 바이트 버퍼가 빠른것 같음.
//다이렉트 byte 버퍼는, 이 클래스의 팩토리 메소드 allocateDirect 를 호출
//하면(자) 작성됩니다.
//static ByteBuffer allocateDirect (int capacity)
//새로운 다이렉트 byte 버퍼를 할당합니다.
//도대체 얼만큼 크게 잡아야 할까?
//한줄에 20글자 = 40~50byte * 여러줄.. 흠.....
//콘솔창에 몇줄이나 뜨지? 50줄?
//그럼 2000바이트 짜리를 만들어야 하나?
//그럼.. 채팅 내용이 계속 쌓이면?????
//미치겠네..
//바이트 버퍼를 여러개 만들고 Queue같은 자료구조에 담아서 관리할까?
//너무 많이 쌓이면 먼저 들어간거 부터 빼면 되니까..
//하여튼 서버에 쓸 용도는 조그맣게..
//읽어와서 보관할 양은 무지 많이..?
//아.. 미치겟네..
//public class ArrayBlockingQueue<E> 사용 결정 -_-;;;
private static final int MAX_WRITE = 100;
ByteBuffer writeBuffer; //서버에 출력용
//ByteBuffer readBuffer; //서버로 부터 입력용 -> 이걸로 콘솔에 출력
private static final int MAX_READ_COL = 100;
private static final int MAX_READ_ROW = 50; //대충 50줄 -_-;
ArrayBlockingQueue<ByteBuffer> chatQueue; //솔직히 어떤 특성의 큐인지 모르겠다. 배열과 맞는다는거만 보고;;
//생성자
Client(UserInfo user, ServerInfo serverInfo)
{
//1.기본 정보 세팅
this.user = user;
this.serverInfo = serverInfo;
this.writeBuffer = ByteBuffer.allocateDirect(MAX_WRITE);
//read 할때마다.. 다이렉트 바이트 버퍼 새로 생성해서 put하기!
this.chatQueue = new ArrayBlockingQueue<ByteBuffer>(MAX_READ_ROW);
try
{
//2.소켓 생성
this.socketChannel = SocketChannel.open(new InetSocketAddress(this.serverInfo.url, this.serverInfo.portNum));
//3.리스너 생성
this.selector = Selector.open();
//4.소켓에 뭔가 쓰여진 이벤트 리스너 등록
//구지 SelectrionKey로 구분해야했나.. Selector에 포함시키지(사용하기 겁나 복잡하네 -_-)
this.socketChannel.register(this.selector, SelectionKey.OP_READ);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//초 간단 인터페이스
public void chat()
{
while(true)
{
readInputStream();
writeOutputStream();
}
}
//서버가 보낸걸 읽어오기
private void readInputStream()
{
//1.채널에 들어온 내용 있나 확인
//2.있으면 내 큐에 추가
//3.화면에 뿌리기
drawToConsol();
}
private void drawToConsol()
{
}
//사용자의 입력을 받아 서버에 전달
private void writeOutputStream()
{
//사용자 입력 처리 스캐너 사용할까?
//서버에 보내기
sendMsgToServer();
}
private void sendMsgToServer()
{
}
}
'개인 프로젝트 관련 고민들 > nio채팅' 카테고리의 다른 글
첩.첩.산.중 (0) | 2014.01.01 |
---|---|
클래스 설계 조각 (0) | 2014.01.01 |
nio 참고 자료 + 프로젝트 깨달음 (0) | 2014.01.01 |
판단 오류2개 + 고민 3가지 (0) | 2014.01.01 |
nio패키지를 활용한 채팅서버 프로젝트 ver 0.1 (기획단계) (0) | 2014.01.01 |
RECENT COMMENT