package me.xcoding.opencdc.net;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.concurrent.atomic.AtomicBoolean;
import me.xcoding.opencdc.binlog.EventFilter;
import me.xcoding.opencdc.binlog.EventMaker;
import me.xcoding.opencdc.binlog.event.Event;
import me.xcoding.opencdc.binlog.event.EventHeader;
import me.xcoding.opencdc.binlog.parser.EventHeaderParser;
import me.xcoding.opencdc.mysql.protocol.HandshakeV10;
import me.xcoding.opencdc.net.connector.ConnectionException;
import me.xcoding.opencdc.net.connector.IDumpConnector;
import me.xcoding.opencdc.net.connector.SocketReader;
import me.xcoding.opencdc.net.connector.SocketWriter;
import me.xcoding.opencdc.net.connector.intern.DumpConnector;
import me.xcoding.opencdc.net.packet.ERRPacket;
import me.xcoding.opencdc.utils.Maker;
// 在我看来,所有的上下文都应该是唯一的,至少是对线程唯一。
public class ConnectorContext {
private HandshakeV10 v10 = null;
private IDumpConnector connector = new DumpConnector(this);
// socket i/o
private SocketReader reader = null;
private SocketWriter writer = null;
// login info
private int port = 3306;
private String host = "locahost";
private String username = "root";
private String password = "root";
/** position in the binlog-file to start the stream with */
private int logPos = 4;
/** server id of this slave */
private int serverId = 6789;
/** filename of the binlog on the master */
private String logName = "mysql-bin.000001";
private boolean crc32 = false;
private final AtomicBoolean isRunning = new AtomicBoolean(false);
public static void main(String[] args) throws Exception {
new ConnectorContext().start();
}
public void start() throws ConnectionException {
// connection to msyql
connector.connection(host, port);
// login
connector.login(username, password);
// get xin and xout wrapper
// this.setXin(connector.getXin());
// this.setXout(connector.getXout());
// send dump command
connector.dumpBinlog();
// new Thead(Task()).start();
thread.run();
}
void stop() {
isRunning.compareAndSet(true, false);
}
void disconnection() {
}
EventFilter filter = new EventFilter();
EventHeaderParser headerParser = new EventHeaderParser();
// StartEventV3Parser v3Parser = new StartEventV3Parser();
void doParse() {
while(isRunning.get()) {
// try {
// ReadablePacket packet = connector.read();
// int status = packet.read(); // packet_header
// if(status != 0) {
//// System.out.println("failure!\n" + ERRPacket.builder(packet.getBody()));
// throw new ConnectionException(ERRPacket.builder(packet.getBody()).toString());
// }
//
// EventHeader header = headerParser.parser(null, packet);
//
// // do deal head body
// System.out.println("typeCode = " + header.typeCode);
//
// // filter
//// if(filter.isFilter(header.typeCode)) {
//// continue;
//// }
//
// // 怎么样解析每个Event了。
//// if(header.typeCode != 19) continue ;
// Event event = EventMaker.parser(header, header.typeCode, packet);
//
// System.out.println(event);
// ConsutomParser.parser(event);
// } catch (ConnectionException e) {
// e.printStackTrace();
// }
}
}
// wrapper
void setXin(InputStream ois) {
}
// wrapper
void setXout(OutputStream oos) {
}
private final Runnable thread = new Runnable() {
public void run() {
isRunning.compareAndSet(false, true);
doParse();
};
};
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public boolean isCrc32() {
return crc32;
}
public void setCrc32(boolean crc32) {
this.crc32 = crc32;
}
public Runnable getThread() {
return thread;
}
public IDumpConnector getConnector() {
return connector;
}
public void setConnector(IDumpConnector connector) {
this.connector = connector;
}
public int getLogPos() {
return logPos;
}
public void setLogPos(int logPos) {
this.logPos = logPos;
}
public int getServerId() {
return serverId;
}
public void setServerId(int serverId) {
this.serverId = serverId;
}
public String getLogName() {
return logName;
}
public void setLogName(String logName) {
this.logName = logName;
}
}