예제 #1
0
파일: MyDSI3.cs 프로젝트: windrobin/kumpro
 ServerDS NewServerDS(IDSI dsiReq)
 {
     while (true)
     {
         lock (servs) {
             if (evExit.WaitOne(0, false))
             {
                 throw new ExitShotException();
             }
             if (servs.Count >= MaxSim)
             {
                 Thread.Sleep(25);
                 continue;
             }
             else
             {
                 ushort   RId  = this.RId++;
                 ServerDS serv = new ServerDS();
                 serv.dsiReq = dsiReq;
                 serv.RId    = RId;
                 servs.Add(serv);
                 return(serv);
             }
         }
     }
 }
예제 #2
0
파일: MyDSI3.cs 프로젝트: windrobin/kumpro
 ServerDS NewServerDS(IDSI dsiReq) {
     while (true) {
         lock (servs) {
             if (evExit.WaitOne(0, false))
                 throw new ExitShotException();
             if (servs.Count >= MaxSim) {
                 Thread.Sleep(25);
                 continue;
             }
             else {
                 ushort RId = this.RId++;
                 ServerDS serv = new ServerDS();
                 serv.dsiReq = dsiReq;
                 serv.RId = RId;
                 servs.Add(serv);
                 return serv;
             }
         }
     }
 }
예제 #3
0
파일: MyDSI3.cs 프로젝트: windrobin/kumpro
        void Receiver()
        {
            Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
            try {
                while (true)
                {
                    DSIPack res = new DSIPack(st);
                    if (res.Command == 5) // DSITickle
                    {
                        continue;
                    }
                    ServerDS sv = GetServerDS(res.RequestID);
                    if (sv == null)
                    {
                        continue;
                    }
                    sv.dsiRes = res;
                    sv.evRecv.Set();
                }
            }
            catch (Exception err) {
                if (!evExit.WaitOne(0, false))
                {
                    //Console.Error.WriteLine("# Receiverが故障しました: " + err.Message);
                }

                lock (servs) {
                    foreach (ServerDS serv in servs)
                    {
                        serv.evRecv.Set();
                        serv.err = err;
                    }
                }

                if (Sock.Connected)
                {
                    Sock.Shutdown(SocketShutdown.Both);
                }
            }
        }
예제 #4
0
파일: MyDSI3.cs 프로젝트: windrobin/kumpro
 void DisconnectServerDS(ServerDS serv)
 {
     lock (servs) {
         servs.Remove(serv);
     }
 }
예제 #5
0
파일: MyDSI3.cs 프로젝트: windrobin/kumpro
 void DisconnectServerDS(ServerDS serv) {
     lock (servs) {
         servs.Remove(serv);
     }
 }