public void GetOnlineClients()
 {
     imcp = new IMCommParamLineState()
     {
         msgType = msgType.LineState, isSuccess = true, IMModels = Program.MainForm.Services
     };
     jsonStr = JsonConvert.SerializeObject(imcp);
     Clients.Caller.addMessage(jsonStr);
 }
        public override Task OnConnected()
        {
            imModel = JSON.ToObject <IMCommModel>(Context.QueryString.Get("Param"));
            //此处应该有认证
            imModel.ConnId = Context.ConnectionId;
            Program.MainForm.WriteToConsole(string.Format("{0} connected: {1} ,  IPAddr: {2} \n Count: {3}", imModel.isService ? "Service" : "Client", Context.ConnectionId, imModel.ipAddress.ToString(), imModel.isService ? Program.MainForm.Services.Count : Program.MainForm.Clients.Count));

            if (imModel.isService)
            {
                if (!Program.MainForm.Services.Exists(e => e.ConnId == imModel.ConnId))
                {
                    Program.MainForm.Services.Add(imModel);
                }
                Groups.Add(imModel.ConnId, "Service");
                imcp = new IMCommParamLineState()
                {
                    IMModel = imModel, msgType = msgType.LineState, fromConnId = imModel.ConnId, isSuccess = true
                };
                jsonStr = JsonConvert.SerializeObject(imcp);
                Clients.Group("Client", new string[0]).addMessage(jsonStr);
                Clients.Group("Service", new string[0]).addMessage(jsonStr);
            }
            else
            {
                if (!Program.MainForm.Clients.Exists(e => e.ConnId == imModel.ConnId))
                {
                    Program.MainForm.Clients.Add(imModel);
                }
                Groups.Add(imModel.ConnId, "Client");
                imcp = new IMCommParamLineState()
                {
                    IMModel = imModel, msgType = msgType.LineState, fromConnId = imModel.ConnId, isSuccess = true
                };
                jsonStr = JsonConvert.SerializeObject(imcp);
                Clients.Group("Service", new string[0]).addMessage(jsonStr);
                Clients.Group("Client", new string[0]).addMessage(jsonStr);
            }
            LogHelper.Debug("Client connected: " + JsonConvert.SerializeObject(imModel));
            return(base.OnConnected());
        }
        public override Task OnDisconnected()
        {
            var model = Program.MainForm.Services.Union(Program.MainForm.Clients).First(f => f.ConnId == Context.ConnectionId);

            Program.MainForm.WriteToConsole(string.Format("{0} disconnected: {1} , Count {2} ", model.isService ? "Service" : "Client", Context.ConnectionId, model.isService ? Program.MainForm.Services.Count : Program.MainForm.Clients.Count));

            if (Program.MainForm.Clients.Exists(e => e.ConnId == Context.ConnectionId))
            {
                imModel = Program.MainForm.Clients.Find(f => f.ConnId == Context.ConnectionId);
                Program.MainForm.Clients.Remove(imModel);
                Groups.Remove(imModel.ConnId, "Client");
                imcp = new IMCommParamLineState()
                {
                    IMModel = imModel, msgType = msgType.LineState, fromConnId = imModel.ConnId, isSuccess = false
                };
                jsonStr = JsonConvert.SerializeObject(imcp);
                Clients.Group("Service", new string[0]).addMessage(jsonStr);
                Clients.Group("Client", new string[0]).addMessage(jsonStr);
            }
            else if (Program.MainForm.Services.Exists(e => e.ConnId == Context.ConnectionId))
            {
                imModel = Program.MainForm.Services.Find(f => f.ConnId == Context.ConnectionId);
                Program.MainForm.Services.Remove(imModel);
                Groups.Remove(imModel.ConnId, "Service");
                imcp = new IMCommParamLineState()
                {
                    IMModel = imModel, msgType = msgType.LineState, fromConnId = imModel.ConnId, isSuccess = false
                };
                jsonStr = JsonConvert.SerializeObject(imcp);
                Clients.Group("Client", new string[0]).addMessage(jsonStr);
                Clients.Group("Service", new string[0]).addMessage(jsonStr);
            }
            LogHelper.Debug("Client disconnected: " + JsonConvert.SerializeObject(imModel));

            return(base.OnDisconnected());
        }