/// <summary> /// 新着データ通知コマンドを作成する。 /// </summary> /// <param name="image">新着画像データ</param> /// <param name="sourceID">コマンド発信元のID</param> /// <returns>新着データ通知コマンド</returns> public static Command CreateInformCommand(PhotoChatImage image, string sourceID) { try { return(new Command(TypeInform, image.SerialNumber, DateTime.Now, image.ID, sourceID, image.Author, image.PhotoName)); } catch (Exception e) { PhotoChat.WriteErrorLog(e.ToString()); return(null); } }
/// <summary> /// サムネイル画像を保存する。 /// </summary> /// <param name="photoName">写真名</param> /// <param name="newImage">サムネイル化する画像</param> public static void SaveImage(string photoName, Bitmap newImage) { try { Bitmap image = PhotoChatImage.ResizeImage( newImage, PhotoChat.ThumbnailWidth, PhotoChat.ThumbnailHeight); image.Save(GetImageFilePath(photoName), ImageFormat.Jpeg); image.Dispose(); } catch (Exception e) { PhotoChat.WriteErrorLog(e.ToString()); } }
/// <summary> /// 受信データをインスタンス化する。 /// 端末時間差からデータ時刻の修正も行う。 /// </summary> /// <param name="type">データのタイプ</param> /// <param name="data">データのバイト列</param> /// <returns>作成したインスタンス。作成できなかったときはnull</returns> private ISendable CreateInstance(int type, byte[] data) { try { // データタイプに応じてインスタンス化(データ時刻修正) switch (type) { case PhotoChatImage.TypePhoto: PhotoChatImage image = PhotoChatImage.CreateInstance(type, data); if (image != null) { image.Date = image.Date.AddTicks(-timeDifference); } return(image); case PhotoChatNote.TypeHyperlink: case PhotoChatNote.TypeRemoval: case PhotoChatNote.TypeStroke: case PhotoChatNote.TypeTag: case PhotoChatNote.TypeText: case PhotoChatNote.TypeSound: PhotoChatNote note = PhotoChatNote.CreateInstance(type, data); if (note != null) { note.Date = note.Date.AddTicks(-timeDifference); } return(note); case Command.TypeRequest: case Command.TypeInform: case Command.TypeTransfer: case Command.TypeSelect: case Command.TypeConnect: case Command.TypeDisconnect: return(new Command(type, data)); case SharedFile.TypeSoundFile: return(new SharedFile(type, data)); } } catch (Exception e) { PhotoChat.WriteErrorLog(e.ToString()); } return(null); }
/// <summary> /// サムネイル画像を更新する。 /// </summary> /// <param name="newImage">更新</param> public void UpdateImage(Bitmap newImage) { try { if (Interlocked.Exchange(ref needImageUpdate, 0) != 0) { SaveImage(photoName, newImage); Image temp = image; this.image = PhotoChatImage.ResizeImage(newImage, imageWidth, imageHeight); if (temp != null) { temp.Dispose(); } } } catch (Exception e) { PhotoChat.WriteErrorLog(e.ToString()); } }
/// <summary> /// 指定したサイズにサムネイル画像を縮小して返す。 /// ただし指定サイズが画像ファイル以上の場合はサイズ変換しない。 /// サムネイル画像がまだ無い場合はnullを返す。 /// </summary> /// <param name="photoName">写真名</param> /// <param name="width">サムネイルの幅</param> /// <param name="height">サムネイルの高さ</param> /// <returns>指定したサイズのサムネイル画像。画像がない場合はnull。</returns> public static Bitmap GetImage(string photoName, int width, int height) { try { // 画像ファイルが存在するか確認 string filePath = GetImageFilePath(photoName); if (!File.Exists(filePath)) { return(null); } // 画像を指定サイズに変換して返す Bitmap original = new Bitmap(filePath); Bitmap image = PhotoChatImage.ResizeImage(original, width, height); original.Dispose(); return(image); } catch (Exception e) { PhotoChat.WriteErrorLog(e.ToString()); return(null); } }
/// <summary> /// 受信したPhotoChatImageを処理する。 /// </summary> /// <param name="image">受信したPhotoChatImage</param> private void Receive(PhotoChatImage image) { try { // 受信データの通し番号をNumberManagerに通知 bool isLatest = GetNumberManager(image.ID).PutReceivedNumber(image.SerialNumber); // 最新のデータかどうかも含めてclientにデータを渡し、 // 新着データであれば接続中の端末にこのデータが必要かコマンドを送る if (client.NewData(image, isLatest)) { SendAll(Command.CreateInformCommand(image, client.ID)); } // 写真受信ログ PhotoChat.WriteLog("Receive Photo", image.PhotoName, string.Empty); } catch (Exception e) { PhotoChat.WriteErrorLog(e.ToString()); } }