ASP.NET Core 装X利器SignalR:电子画板
电子画板开发需求
教师端需求:
教师登录后能创建房间(教室)
学生加入房间后有通知提醒
教师能够解散房间
基本的画板功能
学生端需求:
能够切换不同在线的房间
能够收到新建房间的通知
能够收到房间解散的通知
基本的画板同步功能
本文原文地址:https://www.limitcode.com/detail/5c45ca572d18e503f0362757.html
教师端UI设计


学生端UI设计

后端服务设计
首先新建StudentController和TeacherController,用于承载学生端和教师端的界面,然后分别添加Index Action并生成各自的Index.cshtml。


视图创建好编写各自的UI,实现基本的布局和画板功能。此处就不贴代码了,源码已托管到github,在文章末尾有链接。
新建 SignalRChat 文件夹并添加继承 Hub 类 的TeacherHub.cs SignalR 集线器,然后在 Startup 中注册该集线器。

我们的电子画板项目是面向多教师的,每个教师可以开设自己的教学房间,房间的概念在 SignalR 中称其为 Group。
新建 Models 文件夹并添加 RoomInfo.cs 类,该类对房间对象进行抽象,其有如下属性:

在 TeacherHub 中新建字典类型的静态字段 _TeacherRooms 保存教师创建的教师信息,此处我们使用 C#线程安全的字典对象 ConcurrentDictionary。为啥要使用静态字段?因为客户端每次连接hub的时候都会创建hub的新实例。

做完上面的这些,教师端就可以创建房间了。教师端创建房间的核心代码如下:

学生端登录后能够获取到所有在线的房间,并可以随意的切换(加入)这些房间,获取所有房间的核心代码如下:

房间创建后教师就可以在画板上操作了,对canvas 的每一次操作行为都会经过Hub推送给加入该房间的所有客户端。并且学生加入房间后应该能够获取到教师之前的讲解内容,这就要求服务端要存储这些操作行为。
在 Models 文件夹下新建 CanvasPoint.cs ,该类抽象 canvas 的操作行为,其定义如下:

在 TeacherHub 中添加 _CanvasPoint 静态字段用于保存每个房间中教师对 canvas 的操作行为,该字段为 ConcurrentDictionary 字典类型,key 为房间编号,value 为canvas操作行为的集合。

将教师端教师每次对canvas的操作保存到_CanvasPoint 的核心实现:

学生端订阅 ReceivePoint 事件,获取到消息后绘制canvas。

到此电子画板的基本功能都已经实现了,由于篇幅问题,房间解散等其他功能的代码就不贴了,大家看源码吧。
电子画板演示效果

源码GitHub地址
https://github.com/itwmike/SignalRStudy
ASP.NET Core 装X利器SignalR:电子画板的更多相关文章
- 在ASP.NET CORE 2.0使用SignalR技术
一.前言 上次讲SignalR还是在<在ASP.NET Core下使用SignalR技术>文章中提到,ASP.NET Core 1.x.x 版本发布中并没有包含SignalR技术和开发计划 ...
- ASP.NET Core开发-后台任务利器Hangfire使用
ASP.NET Core开发系列之后台任务利器Hangfire 使用. Hangfire 是一款强大的.NET开源后台任务利器,无需Windows服务/任务计划程序. 可以使用于ASP.NET 应用也 ...
- asp.net core 2.0集成signalr
在博客园也很多年了,一直未曾分享过什么东西,也没有写过博客,但自己也是汲取着博客园的知识成长的: 这两天想着不能这么无私,最近.NET CORE貌似挺流行的,闲来无事也自己搞了个asp.net cor ...
- ASP.NET Core的实时库: SignalR简介及使用
大纲 本系列会分为2-3篇文章. 第一篇介绍了SignalR的预备知识和原理 本文介绍SignalR以及ASP.NET Core里使用SignalR. 本文的内容: 介绍SignalR 在ASP.NE ...
- ASP.NET Core的实时库: SignalR -- 预备知识
大纲 本系列会分为2-3篇文章. 第一篇介绍SignalR的预备知识和原理 然后会介绍SignalR和如何在ASP.NET Core里使用SignalR. 本文的目录如下: 实时Web简述 Long ...
- asp.net core实时库:SignalR(1)
SignalR的基本概念 前言 最近在自己的项目中实践了SignalR的使用,asp.net core 2.1版本的时候建立了对SignalR的支持,SignalR的可使用Web Socket, Se ...
- ASP.NET CORE 2.0 Uses SignalR Technology
https://www.codeproject.com/Articles/1208322/ASP-NET-CORE-Uses-SignalR-Technology
- 一个由正则表达式引发的血案 vs2017使用rdlc实现批量打印 vs2017使用rdlc [asp.net core 源码分析] 01 - Session SignalR sql for xml path用法 MemCahe C# 操作Excel图形——绘制、读取、隐藏、删除图形 IOC,DIP,DI,IoC容器
1. 血案由来 近期我在为Lazada卖家中心做一个自助注册的项目,其中的shop name校验规则较为复杂,要求:1. 英文字母大小写2. 数字3. 越南文4. 一些特殊字符,如“&”,“- ...
- ASP.NET Core 2.0 SignalR 示例
# 一.前言 上次讲SignalR还是在<[在ASP.NET Core下使用SignalR技术](http://dotnet.ren/2017/02/21/%E5%9C%A8ASP-NET-Co ...
随机推荐
- Selenium原理初步--Android自动化测试学习历程
章节:自动化基础篇——Selenium原理初步(第五讲) 注:其实所有的东西都是应该先去用,但是工具基本都一样,底层都是用的最基础的内容实现的,测试应该做的是: (1)熟练使用工具,了解各个工具的利弊 ...
- swift - VFL
1.VFL语法总结: //(1)“H”表示水平方向,“V”表示垂直方向 //(2)“|”表示父视图的边界 //(3)“[]”表示这是一个视图UIView的子类,可以组合多个条件,条件用"() ...
- ==和equals方法:
Java程序中判断两个变量是否相等有两种方式: 一.利用 == 运算符: 1.1.如果两个变量是基本类型变量,且都是数值型(不一定要求数值类型完全相同),则只要两个变量的值相同,就返回true 1.2 ...
- 一名优秀的UI设计师应该具备哪些条件?
想做好一个好的UI设计师除了应该具有一定的审美能力,还要了解整个产品的开发过程,因为目前国内的软件行业还不能对UI设计形成应有的重视度,所以对我们的要求就更高了,你要能作出夺人眼球的东西,还要站在用户 ...
- rsyncd.conf
rsyncd.conf 28 Jan 2018 rsyncd.conf(5) 28 Jan 2018 NAME rsyncd.conf - configuration file for rsync i ...
- Jmeter If Controller中设置多个条件用“与”进行连接
"${noteID}"!="NOT FOUND" && "${securitiesId}"!="0P00011FQ ...
- AJAX初尝试——ACM/ICPC类比赛气球管理系统
很早之前做过一个,白板没界面,20秒暴力刷新,数据库每个team一个n列的对应n个题目的标记项,只能对单个比赛暴力把全部user_id导入单独的气球表(也就是cid=1000用这个表的话,cid100 ...
- HTTP Error 403.14问题处理
打开目录浏览后,点击启用.
- 2018.10.01 NOIP模拟 购买书籍(贪心+STL)
传送门 一道有意思的贪心. 感觉使用了网络流推流反悔的思想. 考虑维护三个setsetset维护a[i]−b[i],b[i]a[i]-b[i],b[i]a[i]−b[i],b[i]和a[i]a[i]a ...
- 2018.06.30 BZOJ4765: 普通计算姬(dfs序+分块+树状数组)
4765: 普通计算姬 Time Limit: 30 Sec Memory Limit: 256 MB Description "奋战三星期,造台计算机".小G响应号召,花了三小时 ...