public override Task OnDisconnected(bool stopCalled) { string userName = Context.User.Identity.Name; ApplicationUser FromUser = null; try { FromUser = db.Users.FirstOrDefault(u => u.Email.Equals(userName)); }catch (Exception e) { } string connectionId = Context.ConnectionId; if (FromUser != null) { lock (FromUser.ConnectionSignal) { ConnectionSignal cs = db.ConnectionSignal.FirstOrDefault(c => c.ConnectionIds.Equals(connectionId)); db.ConnectionSignal.Remove(cs); } } db.SaveChanges(); return(base.OnDisconnected(stopCalled)); }
private void WriteFrame(ConnectionSignal signal, BinaryNumber channelId, byte[] buffer, int offset, int count) { int frameCount = CONNECTION_FRAME_BUFFER_SIZE; while (true) { if (count < frameCount) { frameCount = count; } lock (_baseStream) { _baseStream.WriteByte((byte)signal); //write frame signal _baseStream.Write(channelId.Value); //write channel id _baseStream.Write(BitConverter.GetBytes(Convert.ToUInt16(frameCount)), 0, 2); //write data length if (frameCount > 0) { _baseStream.Write(buffer, offset, frameCount); //write data } offset += frameCount; count -= frameCount; if (count < 1) { _baseStream.Flush(); //flush base stream break; } } } }
public override Task OnConnected() { //string userName = Context.User.Identity.Name; string connectionId = Context.ConnectionId; HttpContext con = HttpContext.Current; var FromUserId = HttpContext.Current.User.Identity.GetUserId(); ApplicationUser FromUser = db.Users.Find(FromUserId); if (FromUser == null) { return(base.OnConnected());; } if (FromUser.ConnectionSignal == null) { FromUser.ConnectionSignal = new List <ConnectionSignal>(); } lock (FromUser.ConnectionSignal) { ConnectionSignal c = new ConnectionSignal(); c.ConnectionIds = connectionId; ConnectionSignal x = FromUser.ConnectionSignal.FirstOrDefault(d => d.ConnectionIds.Equals(connectionId)); if (x == null) { //if (FromUser.ConnectionSignal.Count == 1) //{ //} //else //{ FromUser.ConnectionSignal.Add(c); //} } } db.SaveChanges(); return(base.OnConnected()); }