电子画板开发需求

教师端需求:

  1. 教师登录后能创建房间(教室)

  2. 学生加入房间后有通知提醒

  3. 教师能够解散房间

  4. 基本的画板功能

 

学生端需求:

  1. 能够切换不同在线的房间

  2. 能够收到新建房间的通知

  3. 能够收到房间解散的通知

  4. 基本的画板同步功能

本文原文地址: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:电子画板的更多相关文章

  1. 在ASP.NET CORE 2.0使用SignalR技术

    一.前言 上次讲SignalR还是在<在ASP.NET Core下使用SignalR技术>文章中提到,ASP.NET Core 1.x.x 版本发布中并没有包含SignalR技术和开发计划 ...

  2. ASP.NET Core开发-后台任务利器Hangfire使用

    ASP.NET Core开发系列之后台任务利器Hangfire 使用. Hangfire 是一款强大的.NET开源后台任务利器,无需Windows服务/任务计划程序. 可以使用于ASP.NET 应用也 ...

  3. asp.net core 2.0集成signalr

    在博客园也很多年了,一直未曾分享过什么东西,也没有写过博客,但自己也是汲取着博客园的知识成长的: 这两天想着不能这么无私,最近.NET CORE貌似挺流行的,闲来无事也自己搞了个asp.net cor ...

  4. ASP.NET Core的实时库: SignalR简介及使用

    大纲 本系列会分为2-3篇文章. 第一篇介绍了SignalR的预备知识和原理 本文介绍SignalR以及ASP.NET Core里使用SignalR. 本文的内容: 介绍SignalR 在ASP.NE ...

  5. ASP.NET Core的实时库: SignalR -- 预备知识

    大纲 本系列会分为2-3篇文章. 第一篇介绍SignalR的预备知识和原理 然后会介绍SignalR和如何在ASP.NET Core里使用SignalR. 本文的目录如下: 实时Web简述 Long ...

  6. asp.net core实时库:SignalR(1)

    SignalR的基本概念 前言 最近在自己的项目中实践了SignalR的使用,asp.net core 2.1版本的时候建立了对SignalR的支持,SignalR的可使用Web Socket, Se ...

  7. ASP.NET CORE 2.0 Uses SignalR Technology

    https://www.codeproject.com/Articles/1208322/ASP-NET-CORE-Uses-SignalR-Technology

  8. 一个由正则表达式引发的血案 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. 一些特殊字符,如“&”,“- ...

  9. ASP.NET Core 2.0 SignalR 示例

    # 一.前言 上次讲SignalR还是在<[在ASP.NET Core下使用SignalR技术](http://dotnet.ren/2017/02/21/%E5%9C%A8ASP-NET-Co ...

随机推荐

  1. configparser模块 logging模块

    configparser模块 固定格式的配置文件 有一个对应的模块去帮你做这个文件的字符串处理 config = configparser.Configparser() config.read(“ex ...

  2. iOS 开发 需要的版本管理工具,UI图,bug管理工具等

    1.版本管理工具  或直接 终端敲命令SVN(smartSvn 或者cornerstone/终端)  或git (sourceTree/终端) 2. 原型管理工具 使用墨刀(https://modao ...

  3. [leetcode]349. Intersection of Two Arrays数组交集

    Given two arrays, write a function to compute their intersection. Example 1: Input: nums1 = [1,2,2,1 ...

  4. sphinx文档

    Navigation index modules | Sphinx主页 | 文档 » 下载 目前版本: 1.2 获得 Sphinx 从 Python Package Index, 或者使用如下命令安装 ...

  5. shell 脚本 测试webApp

    vim **.sh文件 开头:#!/bin/bash ////////// copy cURL //因为这样copy的url就是一个命令(进入chrome的开发者工具里面,点network,找到刚刚访 ...

  6. 淘宝、天猫又开源了一个动态化、高性能的UI框架

    前言 淘宝.天猫一直致力于解决 页面动态化的问题 在2017年的4月发布了v1.0解决方案:Tangram模型 及其对应的 Android库 vlayout,该解决方案在手机淘宝.天猫 Android ...

  7. workerman使用

    1.start_timer.php(boc) <?php use \Workerman\Worker; use \Workerman\Lib\Timer; require_once '/var/ ...

  8. laravel在控制器中赋值给视图

    1.控制器 2.视图

  9. window安装设置

    https://jingyan.baidu.com/article/73c3ce28ed7d92e50243d96c.html

  10. Vue.js (Frontend & Backend)尝试前后端分离

    前言 前端用什么框架都可以,这里选择小巧的vuejs. 要实现的功能很简单:1.登录功能,成功将服务器返回的token存在本地2.使用带token的header访问服务器的一个资源 本次实验环境: & ...