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 ...
随机推荐
- C#操作Excel 单元格的格式处理[xyytIT]
一. C# 操作 Excel 单元格自动填充,居中对齐,字体颜色等格式设置: Excel.Range titleRange = worksheet.get_Range(worksheet.Cells[ ...
- Aactivity和Service之间的通信
一.在activity中定义三个按钮 一个开启服务 一个关闭服务,还有一个是向服务发送广播 当创建出Serevice时先执行Service的onCreate()创建服务后只执行一次 以后每次点击开启 ...
- SSH框架整合jar包时的注意事项
SSH框架整合jar包时的注意事项: 在将三个框架所需的jar整合到一起后,要看一下有没有相同类型但是版本不同的jar包,如果有的话,需要把低版本的jar包删除掉,否则会报错.我这里整合的时候java ...
- db2 sql调优
当我们发现某个SQL语句执行很慢时,可以通过查看它的访问计划来定位原因,如是否执行了合适的索引.是否采用了正确的连接方法等.但是我们发现很多用户对访问计划的生成和解释工具的使用存在很多疑惑,本文通过一 ...
- oracle的分析函数over(Partition by...) 及开窗函数
over(Partition by...) 一个超级牛皮的ORACLE特有函数. oracle的分析函数over 及开窗函数一:分析函数overOracle从8.1.6开始提供分析函数,分析函 ...
- 抓取访客ip
$realip = $_SERVER['REMOTE_ADDR'] $proxy_ip = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);//有用到代理 ...
- mysql添加注释
-- 查看字段类型-- show columns from campaign_distribute --给表添加注释 -- alter table campaign_distribute commen ...
- c++ 博客资源
/************************************************************** 技术博客 http://www.cnblogs.com/itdef/ ...
- js 数组去重的三种方法(unique)
方法一: Array.prototype.unique=function(){ var arr=[];//新建一个临时数组 for(var i=0;i<this.length;i++){//遍历 ...
- Metro Revealed: Building Windows 8 apps with XAML and C# 阅读笔记
第一章1.1.3中提到 Jesse Liberty 的<Pro Windows 8 Development with XAML and C#>,这是一本关于win8更全面的书,以后看.