public void Stop() { rwlock_object.EnterWriteLock(); try { if (STATE == SERVERSTATE.SERVER) { //第一步,关闭自身的监听 listener_object.Stop(); //第二步,关闭所有客户端的连接 int count = (int)GLOBAL.NETSOCK_MAX_CLIENT_COUNT; for (int i = 0; i < count; i++) { if (client_object[i].STATE == TCPSTATE.CONNECT) { client_object[i].Stop(); } } //发出中止信号 STATE = SERVERSTATE.STOP; logger.Print(LOGLEVEL.INFO, "Server stop."); } } finally { rwlock_object.ExitWriteLock(); } }
//================== public void Start() { rwlock_object.EnterWriteLock(); try { if ((STATE == SERVERSTATE.INSTALL) || (STATE == SERVERSTATE.PAUSE)) { //第一步,开始侦听 listener_object.Start(); if (listener_object.STATE == TCPSTATE.LISTEN) { //第二步,启动服务器线程 STATE = SERVERSTATE.SERVER; Thread STR = new Thread(this.ServerThread); server_thread = STR; server_thread.Start(); Thread BTR = new Thread(this.BroadcastThread); broadcast_thread = BTR; broadcast_thread.Start(); logger.Print(LOGLEVEL.INFO, "Start server thread succesfully."); } else { logger.Print(LOGLEVEL.ERROR, "Listenr failed to start listen thread."); } } else { logger.Print(LOGLEVEL.ERROR, "Invalid state to start server thread."); } } finally { rwlock_object.ExitWriteLock(); } }
//================== public void Reset() { Stop(); rwlock_object.EnterWriteLock(); try { if (STATE != SERVERSTATE.FREE) { listener_object = null; send_buffer.Clear(); receive_buffer.Clear(); STATE = SERVERSTATE.FREE; logger.Print(LOGLEVEL.INFO, "Broadcast server reset."); } } finally { rwlock_object.ExitWriteLock(); } }
//================== public BroadcastServer(LOGGER logObj) { logger = logObj; rwlock_object = new ReaderWriterLockSlim(); listener_object = null; //准备客户端 int count = (int)GLOBAL.NETSOCK_MAX_CLIENT_COUNT; client_object = new TCPObject[count]; for (int i = 0; i < count; i++) { client_object[i] = new TCPObject(logObj); } //buffer send_buffer = new StringBuffer(); receive_buffer = new StringBuffer(); STATE = SERVERSTATE.FREE; }
public bool Init(int port) { Reset(); bool state = true; rwlock_object.EnterWriteLock(); try { listener_object = new TCPListener(logger); listener_object.Bind(port); if (listener_object.STATE == TCPSTATE.INSTALL) { STATE = SERVERSTATE.INSTALL; logger.Print(LOGLEVEL.INFO, "Broadcast server init succesfully."); } else { state = false; } } finally { rwlock_object.ExitWriteLock(); } return(state); }