Example #1
0
 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();
     }
 }
Example #2
0
 //==================
 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();
     }
 }
Example #3
0
 //==================
 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();
     }
 }
Example #4
0
        //==================
        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;
        }
Example #5
0
        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);
        }