public void PushDeal() { PropertyHelper.DealIsPushed = true; SoftwareProduct[] Products = Settings.simulation.GetAllProducts().Where(pr => (pr.Type.ToString() == "CMS" || pr.Type.ToString() == "Office Software" || pr.Type.ToString() == "Operating System" || pr.Type.ToString() == "Game") && pr.Userbase > 0 && pr.DevCompany.Name != Settings.MyCompany.Name && pr.ServerReq > 0 && !pr.ExternalHostingActive) .ToArray(); int index = PropertyHelper.Random.Next(0, Products.Length); SoftwareProduct prod = Settings.simulation.GetProduct(Products.ElementAt(index).SoftwareID, false); ServerDeal deal = new ServerDeal(Products[index]) { Request = true }; deal.StillValid(true); HUD.Instance.dealWindow.InsertDeal(deal); }
/// <summary> /// 等待客户端的连接 并且创建与之通信的Socket /// </summary> //static Socket socketSend; void Listen(object o) { try { Socket socketWatch = o as Socket; while (true) { //等待接收客户端连接 Socket socketSend = socketWatch.Accept(); //获取客户端的IP和端口 IPEndPoint ipEndClient = (IPEndPoint)socketSend.RemoteEndPoint; //输出客户端的IP和端口 Console.Write("Connect with {0} at port {1}", ipEndClient.Address, ipEndClient.Port); ShowMsg(socketSend.RemoteEndPoint.ToString() + ":" + "连接成功!"); //创建一个服务器处理流程 ServerDeal serverdeal = new ServerDeal(); serverdeal.socket = socketSend; //开启一个新线程,执行接收消息方法 Thread r_thread = new Thread(Received); r_thread.IsBackground = true; r_thread.Start(serverdeal); } } catch (Exception ee) { ShowMsg(ee.ToString()); } }
//断线的操作 private void clientBreakUp(ServerDeal serverDeal, Socket curSocket) { //调用客户端断开 serverDeal.clientBreak(true); ShowMsg(curSocket.RemoteEndPoint + ": 当前已断开"); curSocket.Close(); serverDeal = null; }
/// <summary> /// 服务器端不停的接收客户端发来的消息 /// </summary> /// <param name="o"></param> void Received(object o) { ServerDeal serverDeal = o as ServerDeal; Socket curSocket = serverDeal.socket; //设置接受时间的超时时间(客户端会定时发心跳包) //curSocket.ReceiveTimeout = Constants.HEART_BEAT_TIME; try { while (true) { //客户端连接服务器成功后,服务器接收客户端发送的消息 byte[] buffer = new byte[1024 * 1024 * 3]; //实际接收到的有效字节数 if (IsSocketConnected(curSocket, serverDeal)) { int len = curSocket.Receive(buffer); //如果当前已断开 if (len <= 0 || !IsSocketConnected(curSocket, serverDeal)) { clientBreakUp(serverDeal, curSocket); break; } //获取服务器传来的消息 serverDeal.msg = Encoding.UTF8.GetString(buffer, 0, len); //屏幕上显示(测试) ShowMsg(curSocket.RemoteEndPoint + ": receive " + serverDeal.msg); //服务器处理该进程 serverDeal.processUpdate(); } else { clientBreakUp(serverDeal, curSocket); break; } } } catch (Exception ee) { ShowMsg(ee.ToString()); clientBreakUp(serverDeal, curSocket); } }
public void PushDeal() { PropertyHelper.DealIsPushed = true; SoftwareProduct[] Products = GameSettings.Instance.simulation.GetAllProducts().Where(pr => (pr.Type.ToString() == "CMS" || pr.Type.ToString() == "Office Software" || pr.Type.ToString() == "Operating System" || pr.Type.ToString() == "Game") && pr.Userbase > 0 && pr.DevCompany.Name != GameSettings.Instance.MyCompany.Name && pr.ServerReq > 0 && !pr.ExternalHostingActive) .ToArray(); int index = PropertyHelper.rnd.Next(0, Products.Length); SoftwareProduct prod = GameSettings.Instance.simulation.GetProduct(Products.ElementAt(index).SoftwareID, false); //var servers = GameSettings.Instance.GetAllServers(); //foreach(var srv in servers) //{ // foreach(var item in srv.Items) // { // item.HandleLoad(100f); // } //} ServerDeal deal = new ServerDeal(Products[index]) { Request = true }; deal.StillValid(true); HUD.Instance.dealWindow.InsertDeal(deal); }
static bool IsSocketConnected(Socket s, ServerDeal serverDeal) { return(!((s.Poll(1000, SelectMode.SelectRead) && (s.Available == 0)) || !s.Connected)); }
public GameProcess gameProcess = null; //玩家所对应的游戏进程 //消除电脑玩家(消除玩家的所有引用) public void destroyAIPlayer() { curServerDeal = null; lobby = null; gameProcess = null; }