Пример #1
0
 /// <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);
     }
 }
Пример #2
0
 /// <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());
     }
 }
Пример #3
0
        /// <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);
        }
Пример #4
0
 /// <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());
     }
 }
Пример #5
0
        /// <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);
            }
        }
Пример #6
0
        /// <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());
            }
        }